我有一个要解析的 XML,这对我来说真的很棘手。
<bundles>
<bundle>
<bitstreams>
<bitstream>
<id>1234</id>
</bitstream>
</bitstream>
<name>FOO</name>
</bundle>
<bundle> ... </bundle>
</bundles>
我想遍历这个 XML 并找到名称元素值为“FOO”的包的比特流内的所有id值。我对任何未命名为“FOO”的捆绑包不感兴趣,并且捆绑包中可能有任意数量的捆绑包和任意数量的比特流。
我一直在用tree.findall('./bundle/name')
它来查找 FOO 包,但这只是返回一个列表,我无法为id值单步执行:
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
这会打印出所有的 id 值,而不是 bundle 'FOO' 的值。
我如何遍历这棵树,找到名为FOO的包,获取这个包节点并收集嵌套在其中的id值?XPath 参数在这里不正确吗?
我正在使用 Python 进行lxml
绑定,但我认为任何 XML 解析器都可以;这些不是大型 XML 树。