2014-05-23 42 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