Groovy XmlSlurper在节点名称中包含特殊字符

时间:2016-01-27 13:17:31

标签: xml groovy

我正在尝试使用groovy xml slurper来覆盖以下XML,目标是进入:

<message>ARoute</message> 

标签。

<org.kie.server.api.model.ServiceResponse>
<type>SUCCESS</type>
<msg>Container container2 successfully called.</msg>
<result class="string">
    <execution-results>
    <result identifier="helloWorld">
<com.me.testproject.HelloWorld>
  <message>ARoute</message>
</com.me.testproject.HelloWorld>
</result>
<fact-handle identifier="helloWorld" external-form="0:1:1985641387:1985641387:2:DEFAULT:NON_TRAIT:com.me.testproject.HelloWorld"/>
</execution-results></result>
</org.kie.server.api.model.ServiceResponse>

当我使用以下gpath时:

def response = new XmlSlurper().parseText(payload)
def result = response.result
println( "Output is " + result)

我得到以下(我期待)

Output is <execution-results>
 <result identifier="helloWorld">
<com.me.testproject.HelloWorld>
  <message>ARoute</message>
</com.me.testproject.HelloWorld>
</result>
<fact-handle identifier="helloWorld" external-  form="0:37:1288414012:1288414012:74:DEFAULT:NON_TRAIT:com.me.testproject.HelloWorld"/>
</execution-results>

然而,当我尝试解析执行结果时,某些东西似乎已关闭,我的理解是因为xml节点名称中的hyphon,我应该把它放在字符中,但似乎没有做到这一点:

def response = new XmlSlurper().parseText(payload)
def result = response.result.'execution-results'
println( "The type is " + result)

输出:      类型是

如何深入挖掘XML消息以获取消息标记?

1 个答案:

答案 0 :(得分:3)

默认情况下,gpath表达式的toString()等同于text()方法:它仅显示与表达式匹配的节点的文本内容。简而言之:表达式已经奏效,但您的println没有显示您的预期。

如果您希望将内容设为xml,则可以使用groovy.xml.XmlUtil.serialize(result)