Python中的XML解析:将曾祖父级元素设置为根元素。

3

我有一个XML文件,其结构如下:

<element1>
    <element2>
        ...
        <element10 name="a">
            ...

我正在尝试使用Python 2.7中的ElementTree XML API解析此文件。但我要查找的数据深藏在结构中。
是否有办法将特定的great-great-...-grand子元素(例如element10)设置为根元素,而不必迭代整个结构?

询问如何将一个特定的“曾曾曾曾孙元素”设置为根元素对我来说并没有太多意义。您的XML文件只有一个根元素,不能超过一个。您是否实际上想要查找特定的后代元素,而不必在内存中保留整个XML结构? - mzjn
那正是我想要的。我想找到那个节点,并从它开始迭代,就像它是根元素一样。此外,让代码在对结构进行任何实际工作之前不必有十个循环会提高可读性。 - katenoox
2个回答

1
尝试一下这个:

'(//*[starts-with(name(), "element")])[last()]'

演示 :

$ cat file
<element1>
    <element2></element2>
    <element3></element3>
    <element4></element4>
    <element5></element5>
    <element6></element6>
    <element10 name="a">x</element10>
</element1>

代码:

(也适用于xmllint

$ saxon-lint.pl --xpath '(//*[starts-with(name(), "element")])[last()]' file

输出:
<element10 name="a">x</element10>

1

多亏了this篇优秀的文章,我终于解决了它。

tree.iter(tag = 'element10')

这将在结构中找到所需的元素,然后您可以迭代其子元素,即使树中有更多名为“element10”的元素。
for element in tree.iter(tag = 'element10'):
    ...

你真的救了我的一天。我已经找了几个小时了这个解决方案...为什么他们要把它弄得这么不清楚和难以找到... - Adriaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接