如何使用groovy访问节点的值

时间:2018-04-26 07:46:44

标签: xml groovy

这是一个非常简单的问题。我有一个像这样的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<test:main xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:test="http://www.testexample.com/test" xmi:id="_BMseoD4mEeiL8o0bAkMKoA">
    <childNode xmi:id="_9_RgZj4lEeiL8o0bAkMKoA" name="Boo!" number="1.414"/>
    <childNode xmi:id="_9_RgYz4lEeiL8o0bAkMKoA" name="toto" number="42"/>
    <childNode xmi:id="__o_QMT4lEeiL8o0bAkMKoA" name="paf" number="12.215"/>
    <childNode xmi:id="_vUeScDy9EeilM5T6mGX42Q" name="pif" number="56.1"/>
</test:main>

我想更改 toto number 的值,例如给它值42.42。 我怎么能这样做?

感谢您的关注!

编辑:
以下代码效果很好:

import groovy.xml.*

def myTest = '''
<test:main xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:test="http://www.testexample.com/test" xmi:id="_BMseoD4mEeiL8o0bAkMKoA">
    <childNode xmi:id="_9_RgZj4lEeiL8o0bAkMKoA" name="Boo!" number="1.414"/>
    <childNode xmi:id="_9_RgYz4lEeiL8o0bAkMKoA" name="toto" number="42"/>
    <childNode xmi:id="__o_QMT4lEeiL8o0bAkMKoA" name="paf" number="12.215"/>
    <childNode xmi:id="_vUeScDy9EeilM5T6mGX42Q" name="pif" number="56.1"/>
</test:main>
'''
myTest = new XmlParser(false, true).parseText(myTest)
myTest.childNode.find { obj ->
    obj.@name == 'toto'
}.@number = 42.42

println XmlUtil.serialize( myTest )

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这里我使用了一个示例xml文件。试试这段代码:

import groovy.xml.XmlUtil


String xmlfile ='''<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price name="dollars" mode="online">5.95</price>
<description>
Two of our famous Belgian Waffles with plenty of real maple syrup
</description>
<calories>650</calories>
</food>
</breakfast_menu>'''

def root = new XmlSlurper().parseText(xmlfile)


root.food.price.find{ it["@name"] =="dollars"}.@ "mode"='offline'


println (XmlUtil.serialize(root))

对于更多操作,请阅读Groovy doc link