nokogiri xpath属性 – 奇怪的结果
我有一堆字段,当我尝试运行时:
src.xpath('//RECORD').each do |record| tbegin = record.xpath('//FIELD/TOKEN')
tbegin
数组返回其他记录中的字段。 我已经检查过第一行是否给了我适当的“记录”子树数组,但下一次调用tbegin
并不tbegin
搜索限制为仅仅“记录”子树。 实际上,它始终返回record[0]
的字段子树。
到目前为止,我通过使用以下方式解决了这个问题:
tbegin = record.css('TOKEN')
但我想知道我做错了什么。
问题是xpath('//FIELD/TOKEN')
的前导双斜杠,它告诉nokogiri匹配与此节点无关的节点,但不管位置如何都匹配整个文档。 要匹配相对于节点本身,您必须删除双斜杠:
tbegin = record.xpath('FIELD//TOKEN')
作为补充说明, tbegin = record.css('TOKEN')
工作的原因是record
是提供搜索开始的顶级节点。 'TOKEN'
不会强制搜索文档的根目录,这与//FIELD/TOKEN
,后者会这样做。