解析するXMLがありますが、これは非常に難しいことです。
<bundles>
<bundle>
<bitstreams>
<bitstream>
<id>1234</id>
</bitstream>
</bitstream>
<name>FOO</name>
</bundle>
<bundle> ... </bundle>
</bundles>
このXMLを繰り返し処理し、name要素の値が「FOO」であるバンドルのビットストリーム内のすべてのid値を見つけたいと思います。「FOO」という名前ではないバンドルには興味がありません。バンドルには、任意の数のバンドルと任意の数のビットストリームが含まれている可能性があります。
私はFOOバンドルを見つけるために使用してきましたが、これはid値tree.findall('./bundle/name')
をステップスルーできないリストを返すだけです。
for node in tree.findall('./bundle/name'):
if node.text == 'FOO':
id_values = tree.findall('./bundle/bitstreams/bitstream/id')
for value in id_values:
print value.text
これにより、バンドル'FOO'の値ではなく、すべてのid値が出力されます。
このツリーを反復処理し、 FOOという名前のバンドルを見つけ、このバンドルノードを取得して、そこにネストされたID値を収集するにはどうすればよいですか?ここでXPath引数は正しくありませんか?
私はPythonでlxml
バインディングを使用して作業していますが、XMLパーサーであれば問題ありません。これらは大きなXMLツリーではありません。