加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用groovy的XML Slurper更新XML?

发布时间:2020-12-14 16:26:27 所属栏目:大数据 来源:网络整理
导读:我阅读了关于 Updating XML with XmlSlurper的Groovy Codehaus文章,这引出了以下问题.考虑我们有一个输入XML结构为即将到来的: customer address street / city / postalcode / /address/customer 是否可以在不知道其具体结构的情况下更改XML?具体:我们有
我阅读了关于 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>

这可能是一种更简洁的方式……但此刻,我的思绪一片空白……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读