2017-05-04 24 views
0

我想通過幾個XML文件進行迭代來比較它們中的數據。 (大數據樣本)。 由於項目設置,我寧願在groovy腳本中執行此操作。如何遍歷groovy腳本中的xml文件

的XML佈局是這樣的:(假數據)

<service name='name' pattern='something' isReliable='maybe'> 
    <receiver name='name' isUsingTwoWaySsl='maybe' isWsRmDisabled='maybe' targetedByTransformation='maybe'> 
    <endpoint name='local_tst01'>URL</endpoint> 
    <endpoint name='local_tst02'>URL</endpoint> 
    <endpoint name='local_tst03'>URL</endpoint> 
    <environment name='dev' default='local_dev' /> 
    <environment name='tst01' default='test' /> 
    <environment name='tst02' default='local_tst02' /> 
    </receiver> 
    <operation name='name'> 
    <sender>sender</sender> 
    <attribute name='operation' type='String'>name</attribute> 
    </operation> 
</service> 

我怎麼遍歷,例如,所有的「端點」的子元素?

請記住,我有一個非常大的數據樣本,並且爲此選擇了一個有點標準化的解決方案。因爲我必須經歷許多不同類型的子元素。

回答

1

你可以做一個深度優先搜索,像這樣:

def xml = '''<service name='name' pattern='something' isReliable='maybe'> 
    <receiver name='name' isUsingTwoWaySsl='maybe' isWsRmDisabled='maybe' targetedByTransformation='maybe'> 
    <endpoint name='local_tst01'>URL</endpoint> 
    <endpoint name='local_tst02'>URL</endpoint> 
    <endpoint name='local_tst03'>URL</endpoint> 
    <environment name='dev' default='local_dev' /> 
    <environment name='tst01' default='test' /> 
    <environment name='tst02' default='local_tst02' /> 
    </receiver> 
    <operation name='name'> 
    <sender>sender</sender> 
    <attribute name='operation' type='String'>name</attribute> 
    </operation> 
</service>''' 

new XmlSlurper().parseText(xml) 
       .'**' 
       .findAll { it.name() == 'endpoint' } 
       .each { node -> 
        println "Found node with attributes ${node.attributes()} and body ${node.text()}" 
       } 
+0

一個問題:什麼是「**」參數辦? –

+0

這是[深度優先](http://groovy-lang.org/processing-xml.html#_xmlparser_and_xmlslurper)遍歷 –

+0

謝謝你的回答! –