如何在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
相关产品推荐
相关产品推荐

