解析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
相关产品推荐
相关产品推荐

