首页 > 解决方案 > 从 lxml 中的属性获取本地名称

问题描述

问题:

我可以在element.tag没有命名空间的情况下使用lxml.etree.QName(element).localname.
如何做类似的element.attrib


例子:

假设这个 XML 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root xmlns="some_ns" xmlns:soc="some_other_ns" >
    <someTag attr1="something" soc:attr2="something else"></someTag>
</root>

此脚本返回attrib第二个属性的命名空间:

from lxml import etree
root = etree.parse('test.xml').getroot()
ns = { 'n':'some_ns', 'son':'some_other_ns' }
print ([e.attrib for e in root.xpath('./n:someTag', namespaces = ns)])

输出:

[{'{some_other_ns}attr2': 'something else', 'attr1': 'something'}]

标签: pythonlxmlxml-namespaces

解决方案


您也可以QName用于属性。

tag = root.xpath('./n:someTag', namespaces = ns)[0]
for a, v in tag.attrib.items():
    print(etree.QName(a).localname, v)

输出:

attr1 something
attr2 something else

推荐阅读