我有一个XML文档,其中包含多个具有相同名称的标记,例如:
<record>
<lang type="1">eng</lang>
<lang>fra</lang>
</record>
现在,如果我想找到Type 1元素,我可以使用
root.findall("./lang[@type='1']")
但是,如果我只想找到没有任何属性的元素,比如第二个?显然,我可以找到所有元素,然后执行 if 检查或尝试,但是有更好的方法吗?
答案 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节点的不同方法。