如何使用 Nokogiri 删除按子节点值搜索的 XML 节点?

How to remove an XML node searching by child node value using Nokogiri?

我需要使用 Nokogiri Gem.

从以下 XML 中删除带有 CodigoImovel == 6124-2Imovel Node
<?xml version="1.0" encoding="UTF-8"?>
<Carga xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <Imoveis>
        <Imovel>
            <CodigoImovel>6124-2</CodigoImovel>
            <TipoImovel>Apartamento</TipoImovel>
            <SubTipoImovel>Apartamento Padrão</SubTipoImovel>
        </Imovel>
        <Imovel>
            <CodigoImovel>86765</CodigoImovel>
            <TipoImovel>Apartamento</TipoImovel>
            <SubTipoImovel>Apartamento Padrão</SubTipoImovel>
            <CategoriaImovel>Cobertura</CategoriaImovel>
        </Imovel>
        <Imovel>
            <CodigoImovel>981768</CodigoImovel>
            <TipoImovel>Casa</TipoImovel>
            <SubTipoImovel>Casa de Condomínio</SubTipoImovel>
            <CategoriaImovel>Térrea</CategoriaImovel>
        </Imovel>
        <Imovel>
            <CodigoImovel>357468</CodigoImovel>
            <TipoImovel>Casa</TipoImovel>
            <SubTipoImovel>Casa de Condomínio</SubTipoImovel>
            <CategoriaImovel>Térrea</CategoriaImovel>
        </Imovel>
        <Imovel>
            <CodigoImovel>587168</CodigoImovel>
            <TipoImovel>Comercial/Industrial</TipoImovel>
            <SubTipoImovel>Conjunto</SubTipoImovel>
            <CategoriaImovel>Comercial/Sala Padrão</CategoriaImovel>
        </Imovel>
    </Imoveis>
</Carga>

XML 代码在 xml_str 变量中,我用这个解析:

xml = Nokogiri::XML(xml_str)

此代码使用 Nokogiri 正确创建了 XML 结构,但我不知道如何按元素值查找以及如何删除它。

以前我在 Imovel 元素中有一个 ID 属性,例如:

<Imovel id="6124-2">......</Imovel>

我正在使用它来删除:

xml.css('#'+imovel_id).remove

而且效果很好。但是将接收此 XML 的系统不允许 Imovel 节点中的额外属性。

感谢任何帮助。谢谢!

我用这段代码解决了这个问题:

xml.xpath("//Carga//Imoveis//Imovel[CodigoImovel='"+re_code+"']").remove

XPATH 允许按值在特定节点中搜索。此查询 returns 特定节点。那么工作就是移除节点。

中接受的答案帮助我解决了问题。