我阅读了Groovy Codehaus关于使用XmlSlurper更新XML的文章,这引出了以下问题.考虑我们有一个输入XML结构为即将到来的:
<customer>
<address>
<street />
<city />
<postalcode />
</address>
</customer>
Run Code Online (Sandbox Code Playgroud)
是否可以在不知道其具体结构的情况下更改XML?具体:我们有一个address节点的参考,想要在不知道任何细节的情况下将它乘以3次?
address.multiply(3)
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
<customer>
<address>
<street />
<city />
<postalcode />
</address>
<address>
<street />
<city />
<postalcode />
</address>
<address>
<street />
<city />
<postalcode />
</address>
</customer>
Run Code Online (Sandbox Code Playgroud)
这可能是可能的,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 )
Run Code Online (Sandbox Code Playgroud)
打印出来:
<?xml version="1.0" encoding="UTF-8"?>
<customer>
<address>
<street/>
<city/>
<postalcode/>
</address>
<address>
<street/>
<city/>
<postalcode/>
</address>
<address>
<street/>
<city/>
<postalcode/>
</address>
</customer>
Run Code Online (Sandbox Code Playgroud)
可能有一种更简洁的方式来做这件事......但此刻,我的思绪一片空白......
| 归档时间: |
|
| 查看次数: |
7582 次 |
| 最近记录: |