0

次の構造の XML があります。

<Root>
   <Batch name="value">
      <Document id="ID1">
         <Tags>
            <Tag id="ID11" name="name11">Contents</Tag>
            <Tag id="ID12" name="name12">Contents</Tag>
         </Tags>
      </Document>

      <Document id="ID2">
         <Tags>
            <Tag id="ID21" name="name21">Contents</Tag>
            <Tag id="ID22" name="name22">Contents</Tag>
         </Tags>
      </Document>
   </Batch>
</Root>

次のようなものを使用して、各ドキュメント ノードの特定のタグのコンテンツを抽出したいと考えています。

xml.xpath('//Document/Tags').each do |node|
   puts xml.xpath('//Root/Batch/Document/Tags/Tag[@id="ID11"]').text
end

2 つのノードごとに id = "ID11" のタグのコンテンツを抽出することが期待されますが、何も取得しません。何か案は?

4

3 に答える 3

1

xpath に軽微なエラーがあります。/Documents/Document を使用していますが、貼り付けた XML は少し異なります。

これはうまくいくはずです:

//Root/Batch/Document/Tags/Tag[@id="ID11"]

これを行う私のお気に入りの方法は、次のように #css メソッドを使用することです。

xml.css('Tag[@id="ID11"]').each do |node|
  puts node.text
end
于 2012-06-20T12:07:57.367 に答える
0

私はそれを次のコードで動作させることができました:

xml.xpath('//Document/Tags').each do |node|
   node.xpath("Tag[@id='ID11']").text
end
于 2012-06-21T13:03:26.643 に答える
0

使用されている xpath が間違っていたようです。

'//Root/Batch/Documents/Document/Tags/Tag[@id="ID11"]'
shoud be
'//Root/Batch/Document/Tags/Tag[@id="ID11"]'
于 2012-06-20T12:02:14.583 に答える