我阅读了关于
Updating XML with XmlSlurper的Groovy Codehaus文章,这引出了以下问题.考虑我们有一个输入XML结构为即将到来的:
<customer> <address> <street /> <city /> <postalcode /> </address> </customer>
是否可以在不知道其具体结构的情况下更改XML?具体:我们有一个地址节点的参考,想要在不知道任何细节的情况下将它乘以3次?
address.multiply(3)
输出应如下所示:
<customer> <address> <street /> <city /> <postalcode /> </address> <address> <street /> <city /> <postalcode /> </address> <address> <street /> <city /> <postalcode /> </address> </customer>
这可以通过appendNode实现,但我缺少groovy中节点的克隆方法.有没有解决方案来实现这一目标?
解决方法
我目前认为克隆节点的唯一方法是将它们序列化为文本,并将它们作为xml的新位解析回来
像这样:
import groovy.xml.StreamingMarkupBuilder import groovy.xml.XmlUtil def xml = """ <customer> <address> <street /> <city /> <postalcode /> </address> </customer> """ def root = new XmlSlurper().parseText( xml ) 2.times { String addressXml = new StreamingMarkupBuilder().bindNode( root.address ) clonedAddress = new XmlSlurper().parseText( addressXml ) root.appendNode( clonedAddress ) } println XmlUtil.serialize( root )
打印出来:
<?xml version="1.0" encoding="UTF-8"?> <customer> <address> <street/> <city/> <postalcode/> </address> <address> <street/> <city/> <postalcode/> </address> <address> <street/> <city/> <postalcode/> </address> </customer>
这可能是一种更简洁的方式……但此刻,我的思绪一片空白……
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。