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

解析XML产品数据:如何获取非嵌套的NAME元素?

如何仅获取XML中<product>的直接子元素<NAME>

嘿,我完全懂你的困扰——你遍历<product>节点时,用普通的选择器会把所有层级的<NAME>都捞出来,但你只想要直接挂在<product>下面的那些非嵌套<NAME>,对吧?

问题出在普通的"NAME"选择器会匹配当前节点下的所有后代节点,不管它嵌套多少层。要精准定位直接子元素,你可以用这两种方法:

方法1:CSS子组合器(>)

CSS里的>符号专门用来选择直接子节点,不会深入到更深的层级。代码示例如下:

# 假设你已经用Nokogiri解析好XML并存入doc变量
doc.css("product").each do |product|
  # 只获取product的直接子元素NAME
  top_level_names = product.css("> NAME")
  # 遍历输出这些非嵌套的NAME文本
  top_level_names.each do |name|
    puts "非嵌套NAME:#{name.text}"
  end
end

方法2:XPath直接子节点选择

如果你更习惯用XPath,也可以用./NAME来定位当前节点的直接子元素,效果和上面的CSS写法完全一致:

doc.css("product").each do |product|
  top_level_names = product.xpath("./NAME")
  top_level_names.each do |name|
    puts "非嵌套NAME:#{name.text}"
  end
end

这两种写法都能帮你精准过滤掉那些嵌套在<product>的子元素里的<NAME>,只保留最外层直接属于<product>的那些。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:16:44