xmlslurper 按子值从 xml 中删除节点
Posted
技术标签:
【中文标题】xmlslurper 按子值从 xml 中删除节点【英文标题】:xmlslurper remove node from xml by child value 【发布时间】:2021-01-20 13:49:30 【问题描述】:如果“field1”的值等于某个值,我需要从下面的 XML 中删除节点“row”。
<root>
<row>
<content type="application/xml">
<properties>
<field1>AAA</field1>
<field2>001</field2>
</properties>
</content>
</row>
<row>
<content type="application/xml">
<properties>
<field1>BBB</field1>
<field2>001</field2>
</properties>
</content>
</row>
<row>
<content type="application/xml">
<properties>
<field1>CCC</field1>
<field2>001</field2>
</properties>
</content>
</row></root>
我尝试了这段代码,但它使 XML 保持不变。
root.'**'.findAll it.name() == 'row' & it.field1.text() == 'BBB'*.replaceNode
我怎样才能实现它?
【问题讨论】:
【参考方案1】:def xml='''
<root>
<row>
<content type="application/xml">
<properties>
<field1>AAA</field1>
<field2>001</field2>
</properties>
</content>
</row>
<row>
<content type="application/xml">
<properties>
<field1>BBB</field1>
<field2>001</field2>
</properties>
</content>
</row>
<row>
<content type="application/xml">
<properties>
<field1>CCC</field1>
<field2>001</field2>
</properties>
</content>
</row></root>
'''
def root = new XmlSlurper().parseText(xml)
root.row.findAll it.content.properties.field1.text()=='BBB' *.replaceNode
groovy.xml.XmlUtil.serialize(root)
【讨论】:
以上是关于xmlslurper 按子值从 xml 中删除节点的主要内容,如果未能解决你的问题,请参考以下文章