lxml
存储所有具有完整名称空间URI的合格名称,例如
from lxml import etree
root = etree.fromstring('''
<a:doc xmlns:a="http://somesite.org/markup" xmlns:b="http://anothersite.org/markup" a:attr="foo">
<b:e b:attr="bar"/>
</a:doc>''')
for el in root.iter():
print("Element", el.tag)
for a in el.attrib:
print(" Attribute", a)
将打印
Element {http://somesite.org/markup}doc
Attribute {http://somesite.org/markup}attr
Element {http://anothersite.org/markup}e
Attribute {http://anothersite.org/markup}attr
但是,如果我需要更多具有名称空间前缀而不是URI的人类可读输出,该怎么办?喜欢
Element a:doc
Attribute a:attr
Element b:e
Attribute b:attr
当然,我可以自己编写转换函数,例如
def uri2prefix(name, nsmap):
qname = etree.QName(name)
for pref, uri in nsmap.items():
if qname.namespace == uri:
return pref + ':' + qname.localname
return name
for el in root.iter():
print("Element", uri2prefix(el.tag, el.nsmap))
for a in el.attrib:
print(" Attribute", uri2prefix(a, el.nsmap))
但是lxml
中必须有相同的功能,因为lxml.etree.tostring()
使用了它。不幸的是,我在文档中找不到它。也许有人知道魔术功能可以完成这项工作?
答案 0 :(得分:0)
没有比使用您的 uri2prefix 函数更好的解决方案了。
唯一可以改进的元素是:this.searchService.getPlayers(this.searchTerm).subscribe((data: any) => { <process your data here> });
实例具有 prefix 属性。因此,您可以像这样更改循环:
_Element