ruby-on-rails - 如何使用 Nokogiri 按子节点值搜索 XML 节点的值?
问题描述
我需要CodigoImovel == 6124-2
使用 Nokogiri Gem 从以下 XML 中获取值。
<?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.xpath("//Carga//Imoveis//Imovel[CodigoImovel='"+re_code+"']") 但它表示未定义的局部变量或方法 `re_code' for # 我感谢任何帮助. 谢谢!
解决方案
我做了以下事情,最终可以得到你需要的节点:
require 'nokogiri'
xml = Nokogiri::XML::Document.parse '<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>'
在解析后和最后注意单引号。然后我做了这个
re_code = '6124-2'
xml.xpath("//Carga//Imoveis//Imovel[CodigoImovel='"+re_code+"']")
并获得第一个<Imovel>
带有子节点的节点作为回报。虽然我不知道你为什么叫它re_code
,但你的意思是在这里使用正则表达式吗?
推荐阅读
- oop - 重构——打破依赖
- docker - 使用 stack-docker 时无法连接到端口 9200 上的 elasticsearch
- scala - scala如何在for循环中一次同时运行X个函数
- mongodb - Kotlin 中带有 spring-data-mongodb 的不可空 ID
- javascript - React - 遍历二维数组并将当前元素与相邻元素及其值进行比较
- android - Android Studio 模拟器上的 kvm 权限被拒绝
- c# - 如何使用 Entity Framework Core 进行全文搜索?
- assembly - 什么是 WebAssembly (Wasm) 模块?
- dialogflow-es - 来自 webhook 的 dialogflow 触发事件
- html - 使用引导程序的项目不会出现在新行上