定义要在变量中修改的节点属性(Groovy)

时间:2018-04-26 13:48:36

标签: xml groovy

是否可以定义要在变量中修改的节点属性,并对其进行评估以设置新值?

我尝试过你可以看到的东西......但它不起作用......

import groovy.xml.*

def myTest = '''
<test:main xmlns:xmi="http://www.omg.org/XMI" xmlns:test="http://www.testexample.com/test">
    <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)

def var = "number"
def toModify = "myTest.childNode.@" + var
evaluate(toModify) = 42

var = "value"
toModify = "myTest.childNode.@" + var
evaluate(toModify) = 42

println XmlUtil.serialize( myTest )

所以在这里,例如,我想修改数字。所以我设置了#number;#39;到 var ,并更改&#34; myTest.childNode的值。@ var&#34;必须解释为: myTest.childNode。@ number

感谢您的关注!

1 个答案:

答案 0 :(得分:0)

抱歉,您的方法与groovy方式不匹配,无法将XPATH查询字符串直接应用于XmlParser的结果。

在groovy中处理XML的美妙之处在于,您可以获得一组非常强大的工具。将它们应用于您的问题会产生:

68² - 4*34*(-510) = 68² + 4 * 34 * 510

使用groovy at查看xml处理的优秀文档 http://groovy-lang.org/processing-xml.html

如果您仍然对使用完整的XPath查询字符串感兴趣,请尝试:

def var = 'number'
def nodeName = 'childNode'

// get all numbers on childNode
myTest."$nodeName"."@$var"

// set just a selected number to 48
// the key for the search could also be a variable
myTest."${nodeName}".find { it.@name == "toto"}."@$var" = 48

// set all numbers to 48
myTest."${nodeName}".each { it."@$var" = 48 }

// set all names to something else
var = "name"
myTest."${nodeName}".each { it."@$var" = "something else" }