You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nokogiri中选取包含特定id值的<item>标签?

用Nokogiri快速获取指定id的item标签

我有如下结构的XML:

<list>
<item>
  <id>1</id>
  <data>123</data>
</item>
<item>
  <id>2</id>
  <data>abc</data>
</item>
</list>

请问Nokogiri中是否有内置函数可以获取带有特定<id>值的<item>标签?

我原本设想的用法大概是这样的:

require 'nokogiri'

xml = '
<list>
<item>
  <id>1</id>
  <data>123</data>
</item>
<item>
  <id>2</id>
  <data>abc</data>
</item>
</list>
'

data = Nokogiri::XML(xml)

item = data.xpath("//item:contains('id', '2')")

目前我可以通过下面的代码实现需求:

item = data.xpath("//item").select {|d| d.xpath("id").text == "2"}

但想了解有没有更直接的内置方法可以实现该功能?


当然有更直接的方法,Nokogiri支持完整的XPath语法,你可以直接在XPath表达式里完成筛选,不需要用Ruby的select遍历:

require 'nokogiri'

xml = '
<list>
<item>
  <id>1</id>
  <data>123</data>
</item>
<item>
  <id>2</id>
  <data>abc</data>
</item>
</list>
'

data = Nokogiri::XML(xml)

# 简洁写法:直接匹配id元素的文本值
item = data.xpath("//item[id='2']")

# 更严谨的写法(当id节点下可能存在其他子节点时适用)
item = data.xpath("//item[id/text()='2']")

# 示例:获取匹配到的item下的data内容
puts item.at_xpath("data").text # 输出 abc

这种方式直接在XML解析层面完成筛选,比手动遍历更高效,完全属于Nokogiri内置支持的功能。

内容的提问来源于stack exchange,提问作者jvx8ss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 13:45:46