Groovy节点与节点列表
发布时间:2020-12-14 16:25:10 所属栏目:大数据 来源:网络整理
导读:我很难在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"/AppSet
我很难在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 错误 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]] 解决方法
这一行在这里:
def appSettings = root.'AppSettings'.find{it.@Name == "bar"}.'Roles' 返回一个NodeList(包含一个节点),所以你想对这个列表的内容调用appendNode,而不是列表本身. 这可以通过以下方式完成: appSettings*.appendNode('Role',[id: 'D']) 这将在列表的每个元素上调用appendNode,或者通过: appSettings[0]?.appendNode('Role',[id: 'D']) 哪个会在列表的第一个元素上调用appendNode(如果有一个第一个元素,这要归功于null-safe运算符?). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |