首页 > 解决方案 > xmlslurper 按子值从 xml 中删除节点

问题描述

如果“field1”的值等于某个值,我需要从下面的 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>

我尝试了这段代码,但它使 XML 保持不变。

root.'**'.findAll { it.name() == 'row' & it.field1.text() == 'BBB'}*.replaceNode{}

我怎样才能实现它?

标签: xmlgroovynodesxmlslurper

解决方案


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)

推荐阅读