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 中删除节点的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 按子值搜索

Firebase 和 Swift 如何按子值提取特定记录?

Firebase - iOS SDK - 按子值过滤

将子值从 firebase 获取到 android 应用程序

XSLT 1.0 按子节点的值对 xml 节点进行分组

使用 textbox.text 更改现有 XML 子值