2014-05-23 45 views
0

我有一个像下面的XML。如何使用groovy从XML获取所有XML节点及其值?

xml1 = ''' 
<?xml version="1.0" encoding="UTF-8"?> 
<soap> 
    <group1> 
     <g1node1>g1value1</g1node1> 
     <g1node2>g1value2</g1node2> 
     <g1node3>g1value3</g1node3> 
    </group1> 
    <group2 attr="attrvalue1"> 
     <g2node1>g2value1</g2node1> 
     <g2node2>g2value2</g2node2> 
     <g2node3>g2value3</g2node3> 
    </group2> 
</soap> 
''' 

在这里,我需要得到所有的xml节点和它的值作为输出,无论是逐行结果和groovy列表。输出应该看起来像

g1node1 = g1value1 
g1node2 = g1value2 
... and so on... 

或任何与常规地图像下面

out = [g1node1 : "g1value1", g1node2 : "g1value2", ...and so on...] 

谁能帮助我如何使用Groovy代码来实现这一目标?

+1

你可以告诉你已经尝试过的代码? –

+0

我觉得这个问题很相似http://stackoverflow.com/q/23632849/2504101。看看提供的答案。 – olyv

回答

0

我还是想知道(蒂姆提到的)你还没有尝试过,但这里是我的痒:

def result = new XmlSlurper().parseText(xml) 
result.'**'.collectEntries { !it.childNodes() ? [ it.name(), it.text() ] : [:] } 
+0

我是新来groovy,我已经尝试过像下面。我Google搜索并找出关键字'collectEntries'。但无法达到我需要的。 XML1 =新的文件( “C:\\ \\垃圾A.TXT”)。文字 高清XMLPARSER =新XmlParser的() OUT = xmlParser.parseText(XML1) 了 '**' collectEntries { 。 println it.text() } 我得到了下面的异常,我知道代码是错误的。 g1value1g1value2g1value3g2value1g2value2g2value3 抛出异常 显示java.lang.NullPointerException \t在ConsoleScript62.run(ConsoleScript62:6) – mmar

+0

** @ dmahapatro ** 感谢您的时间和帮助。我想你的代码和它的作品,结果显示一个如下 > [g1node1:g1value1,g1node2:g1value2,g1node3:g1value3,g2node1:g2value1,g2node2:g2value2,g2node3:g2value3] 我有2个问题。 1.是否可以使用(双引号)“”?中的值。 2.当我在SoapUI(它的我的自动化工具)中执行相同的代码时,我在我使用“out。'**'的行上得到一个空指针异常。collectEntries {...” 你能帮我吗? – mmar