ElementTree:找到没有元素的孩子

时间:2014-03-13 12:40:54

标签: python xml elementtree

我有一个XML文档,其中包含多个具有相同名称的标记,例如:

<record>
    <lang type="1">eng</lang>
    <lang>fra</lang>
</record>

现在,如果我想找到Type 1元素,我可以使用

root.findall("./lang[@type='1']")

但是,如果我只想找到没有任何属性的元素,比如第二个?显然,我可以找到所有元素,然后执行 if 检查或尝试,但是有更好的方法吗?

2 个答案:

答案 0 :(得分:4)

ElementTree没有实现完整的XPath language,所以它缺少像布尔值,数字和字符串比较函数这样的东西。正如您已经意识到的那样,您在此处执行的操作是负面属性搜索,但对于ET的有限XPath实现,这是不可能的。

ET的程序员依靠Python的比较器功能通过pythonic if,check, try / except 方法提供这些功能。已经提到了。

答案 1 :(得分:2)

遍历整个树,打印所有标签和属性。

for el in tree.iter():
     print el.tag, el.attrib

record标记处开始遍历您的树,打印所有标记和属性。

for el in tree.iter(tag='record'):
     print el.tag, el.attrib

遍历lang标记。

for el in tree.iter(tag='lang'):
     print el.tag, el.attrib

我还要看一下Processing XML in Python with ElementTree。这应该可以帮助您找出解析XML节点的不同方法。