我有一个XML文件:
<root>
<person name="brother">Abhijeet</person>
<person name="sister">pratiksha</person>
</root>
我想用Nokogiri解析它。我尝试使用CSS和XPath,但它返回nil或第一个元素值。如何检索其他值? 我试过了:
doc = Nokogiri::XML(xmlFile)
doc.elements.each do |f|
f.each do |y|
p y
end
end
和
doc.xpath("//person/sister")
doc.at_xpath("//person/sister")
答案 0 :(得分:0)
这是使用CSS搜索具有给定参数和值的节点的基本方法:
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<root>
<person name="brother">Abhijeet</person>
<person name="sister">pratiksha</person>
</root>
EOT
doc.at('person[name="sister"]').to_html # => "<person name=\"sister\">pratiksha</person>"
您需要研究CSS和XPath以及它们的语法是如何工作的。在XPath中//person/sister
意味着在<sister>
个节点内的<person>
个节点搜索,匹配如下内容:
<root>
<person>
<sister />
</person>
<person>
<sister />
</person>
</root>
它会找到所有<sister />
个节点。它不会搜索节点的参数。
不要这样做:
doc.elements.each do |f|
f.each do |y|
p y
end
end
你会浪费大量的CPU来处理每个元素。而是学习选择器如何工作,这样你就可以利用libXML的强大功能。