grails - 使用XmlSlurper解析时如何使用带点的配置条目

标签 grails groovy xmlslurper

我正在尝试使用groovy Config条目来使用XmlSlurper解析xml文件。

这是配置文件:

sample {
    xml {
        frompath = "Email.From"
    }
}

这是XML
<xml>
    <Email>
        <From>
            <Address>foo@bar.com</Address>
            <Alias>Foo Bar</Alias>
        </From>
    <Email>
</xml>

这是我最初尝试的方法:
XmlSlurper slurper = new XmlSlurper()

def record = slurper.parseText((new File("myfile.xml")).text)

def emailFrom = record?."${grailsApplication.config.sample.xml.frompath}".Address.text()

这是行不通的,因为XmlSlurper允许一个人在路径名中使用特殊字符,只要它们用引号引起来,因此该应用程序将其翻译为:
def emailFrom = record?."Email.From".Address.text()

并不是
def emailFrom = record?.Email.From.Address.text()

我尝试将frompath属性设置为"Email"."From",然后设置为'"Email"."From"'。我尝试在parse语句的中间标记该属性(不要问。)

有人可以向我指出一些资源,以了解我是否/如何做到这一点?

我觉得这issue getting dynamic Config parameter in Grails taglib和这https://softnoise.wordpress.com/2013/07/29/grails-injecting-config-parameters/可能有解决的耳语,但是我需要新鲜的眼睛才能看到它。

最佳答案

issue getting dynamic Config parameter in Grails taglib中的解决方案是取消引用此路径的正确方法。例如。

def emailFrom = 'Email.From'.tokenize('.').inject(record){ r,it -> r."$it" }
def emailFromAddress = emailFrom.Address.text()

如果您的路径变得复杂,而宁愿使用可能更危险的方法,则也可以使用Eval。例如。
def path = "a[0].b.c"
def map = [a:[[b:[c:666]]]] // dummy map, same as xmlslurper
assert Eval.x(map, "x.$path") == 666

关于grails - 使用XmlSlurper解析时如何使用带点的配置条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175103/

相关文章:

java - 使用 groovy 的 SOAP 请求

groovy - XmlSlurper: 获取原文件中groovy.util.slurpersupport.NodeChild的行号

java - RestAssured 和属性的 GPath 表达式不一致

javascript - 如何从 Javascript 访问我的 groovy/grails 值

groovy - 在Gradle 0.8构建中捕获标准输出

grails - 从gsp访问模型变量

java - 反射(reflection) Groovy 脚本中声明的类

xml - Groovy XmlSlurper 解析混合文本和节点

grails - 我需要一个grails quartz sample 项目

json - 如何从Controller将嵌套 map 呈现为JSON