nokogiri xpath属性 - 奇怪的结果

时间:2012-09-06 13:49:47

标签: ruby xpath nokogiri

我有很多字段,当我尝试运行时:

src.xpath('//RECORD').each do |record|
tbegin = record.xpath('//FIELD/TOKEN')

tbegin数组返回其他记录中的字段。我已经检查过第一行是否为我提供了适当的“记录”子树数组,但下一次调用tbegin并不会将搜索限制为“记录”子树。实际上,它始终返回record[0]的字段子树。

到目前为止,我通过使用:

来解决这个问题
tbegin = record.css('TOKEN')

但我想了解我做错了什么。

2 个答案:

答案 0 :(得分:4)

问题是xpath('//FIELD/TOKEN')中的前导双斜杠,它告诉nokogiri匹配与此节点无关的节点,但不管位置如何都匹配整个文档。要匹配相对于节点本身,您必须删除双斜杠:

tbegin = record.xpath('FIELD//TOKEN')

答案 1 :(得分:1)

作为补充说明,tbegin = record.css('TOKEN')有效的原因是record正在提供搜索开始的顶级节点。 'TOKEN'不会强制搜索文档的根目录,这与//FIELD/TOKEN不同,后者会这样做。