0
试图让我的脑袋围绕Nokogiri和XPath,并希望你能帮助解释这种行为。此代码:Nokogiri:嵌套xpath如何访问外层循环?
data = Nokogiri::XML(%{
<veg>
<peas>
<color>"green"</color>
</peas>
<peas>
<color>"yellow"</color>
</peas>
</veg>
})
data.xpath('//peas').each do |p|
puts p
puts p.xpath('color/text()')
puts p.xpath('//color/text()') # output not as expected
end
给出了这样的输出:
<peas>
<color>"green"</color>
</peas>
"green"
"green"
"yellow"
<peas>
<color>"yellow"</color>
</peas>
"yellow"
"green"
"yellow"
如何放p.xpath('//color/text()')
结束了检索绿色和黄色,而p只包含一个或其他?
这是一个常见的XPath新手错误,思考'//节点'实际上意味着'.//节点'。 –
除非你绝对必须了解XPath,否则我建议在Nokogiri中使用CSS。 CSS访问器更简单,大多数情况下更容易阅读。尽管XPath能够进行非常复杂的搜索,所以我将它用于这些特殊场合。尝试'data.search('peas color')。map(&:text)'。 –
@MarkThomas谢谢! –