Ruby 如何仅检索未嵌套的元素?
我正在尝试解析一些XML内容,在本例中是使用一些产品:Ruby 如何仅检索未嵌套的元素?,ruby,nokogiri,Ruby,Nokogiri,我正在尝试解析一些XML内容,在本例中是使用一些产品: <PRODUCTS> <PRODUCT> <NAME><![CDATA[Some name]]></NAME> <CATEGORIES> <CATEGORY> <NAME><![CDATA[Category 1]]></NAME> </CATEGORY>
<PRODUCTS>
<PRODUCT>
<NAME><![CDATA[Some name]]></NAME>
<CATEGORIES>
<CATEGORY>
<NAME><![CDATA[Category 1]]></NAME>
</CATEGORY>
<CATEGORY>
<NAME><![CDATA[Category 2]]></NAME>
</CATEGORY>
</CATEGORIES>
</PRODUCT>
<PRODUCT>
<NAME><![CDATA[Some other name]]></NAME>
<CATEGORIES>
<CATEGORY>
<NAME><![CDATA[Category 1]]></NAME>
</CATEGORY>
<CATEGORY>
<NAME><![CDATA[Category 2]]></NAME>
</CATEGORY>
</CATEGORIES>
</PRODUCT>
</PRODUCTS>
我还获取每个产品的嵌套名称元素
如何仅获取未嵌套的名称
?我知道product.at_css(“NAME”)
只返回第一个元素,但我的问题不是如何获取第一个元素,而是如何获取未嵌套的元素。您可以使用
仅选择NAME
元素,这些元素是产品的直接子元素:
doc.css("PRODUCT").each do |product|
puts product.css("> NAME")
end
这将输出以下内容:
<NAME><![CDATA[Some name]]></NAME>
<NAME><![CDATA[Some other name]]></NAME>
您可以使用以下命令
doc.css("PRODUCT").each do |product|
puts product.css("NAME").first
end
使用:
.xpath(“NAME”)
在本例中,只返回直接后代。css子选择器也可以达到同样的效果
doc.css("PRODUCT").each do |product|
puts product.css("> NAME").first
end
但这取决于XML的顺序。如果类别
和名称
被切换,它将返回第一个类别的名称。当然,你的答案要好得多!谢谢,但这正是我所说的,我不想看到的。谢谢,但这将完全改变事情的顺序。它会将操作限制为仅与一种元素一起工作。如果我想逐个产品执行一系列任务,我不能使用这种方法,因为在这种方法中,事情是按元素名逐个元素名完成的。@JohnSmith1976查看更新的版本。我最初的例子是简明扼要的,当然你不必马上使用组合选择器。
doc.xpath("PRODUCTS/PRODUCT").each do |product|
puts product.xpath("NAME").first
end
doc.css("PRODUCT").each do |product|
puts product.css("> NAME").first
end