2

我有一堆字段,当我尝试运行时:

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

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

到目前为止,我已经通过使用以下方法解决了这个问题:

tbegin = record.css('TOKEN')

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

4

2 回答 2

4

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

tbegin = record.xpath('FIELD//TOKEN')
于 2012-09-06T13:58:03.387 回答
1

作为补充说明,tbegin = record.css('TOKEN')有效的原因是record提供搜索将开始的顶部节点。'TOKEN'不会强制在文档的根目录进行搜索,不像//FIELD/TOKEN,它会这样做。

于 2012-09-06T18:08:36.210 回答