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 に答える