我有一堆字段,当我尝试运行时:
src.xpath('//RECORD').each do |record|
tbegin = record.xpath('//FIELD/TOKEN')
CCD_ 1数组返回来自其他记录的字段。我已经检查了第一行是否为我提供了适当的"record"子树数组,但对tbegin
的下一个调用并没有将搜索限制为仅搜索"record"子树。事实上,它一致地返回record[0]
的字段子树。
到目前为止,我已经通过使用解决了这个问题
tbegin = record.css('TOKEN')
但我想知道我做错了什么。
问题是xpath('//FIELD/TOKEN')
中的主要双间隙,它告诉nokogiri匹配的节点不是相对于此节点,而是整个文档中的节点,无论位置如何。要相对于节点本身进行匹配,必须删除双斜线:
tbegin = record.xpath('FIELD//TOKEN')
作为补充说明,tbegin = record.css('TOKEN')
工作的原因是record
提供了开始搜索的顶部节点。'TOKEN'
不强制在文档的根目录进行搜索,而//FIELD/TOKEN
会这样做。