如何使用 Nokogiri 删除按子节点值搜索的 XML 节点?
How to remove an XML node searching by child node value using Nokogiri?
我需要使用 Nokogiri Gem.
从以下 XML 中删除带有 CodigoImovel == 6124-2
的 Imovel 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 特定节点。那么工作就是移除节点。
中接受的答案帮助我解决了问题。
我需要使用 Nokogiri Gem.
从以下 XML 中删除带有CodigoImovel == 6124-2
的 Imovel 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 特定节点。那么工作就是移除节点。