我很难在xml结构中添加更深的节点.我错过了node和nodeList之间的东西.任何帮助将不胜感激.
def xml='''<Root id="example" version="1" archived="false">
<Item name="one" value="test"/>
<Item name="two" value="test2"/>
<Item name="three" value="test3"/>
<AppSettings Name="foo" Id="foo1">
<roles>foo</roles>
</AppSettings>
<AppSettings Name="bar" Id="bar1">
<Item name="blue" value=""/>
<Item name="green" value=""/>
<Item name="yellow" value=""/>
<Roles>
<Role id="A"/>
<Role id="B"/>
<Role id="C"/>
</Roles>
</AppSettings>
</Root>'''
root = new XmlParser().parseText(xml)
def appSettings = root.'AppSettings'.find{it.@Name == "bar"}.'Roles'
appSettings.appendNode('Role', [id: 'D'])
def writer = new StringWriter()
def printer = new XmlNodePrinter(new PrintWriter(writer))
printer.preserveWhitespace = true
printer.print(root)
String result = writer.toString()
println result
Run Code Online (Sandbox Code Playgroud)
错误
groovy.lang.MissingMethodException: No signature of method: groovy.util.NodeList.appendNode() is applicable for argument types: (java.lang.String, java.util.LinkedHashMap) values: [Role, [id:D]]
Run Code Online (Sandbox Code Playgroud)
这一行在这里:
def appSettings = root.'AppSettings'.find{it.@Name == "bar"}.'Roles'
Run Code Online (Sandbox Code Playgroud)
返回一个NodeList(包含一个节点),所以你要调用appendNode这个列表的内容,而不是列表本身.
这可以通过以下方式完成:
appSettings*.appendNode('Role', [id: 'D'])
Run Code Online (Sandbox Code Playgroud)
这将调用appendNode列表的每个元素,或通过:
appSettings[0]?.appendNode('Role', [id: 'D'])
Run Code Online (Sandbox Code Playgroud)
这将调用appendNode列表的第一个元素(如果有一个第一个元素,感谢null-safe运算符?).
| 归档时间: |
|
| 查看次数: |
4639 次 |
| 最近记录: |