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