的Python:忽略elementtree.ElementTree的xmlns(Python: Ig

2019-07-30 03:24发布

有没有办法忽略在塔格名的XML命名空间elementtree.ElementTree

我尝试打印所有technicalContact标签:

for item in root.getiterator(tag='{http://www.example.com}technicalContact'):
        print item.tag, item.text

而我得到的是这样的:

{http://www.example.com}technicalContact blah@example.com

但我真正想要的是:

technicalContact blah@example.com

有没有只显示后缀(SANS的xmlns),或更好的方法 - 遍历元素,而无需显式声明的xmlns?

Answer 1:

您可以定义一个发电机递归通过你的元素树搜索,以便找到与合适的标签名称结尾的标签。 例如,这样的事情:

def get_element_by_tag(element, tag):
    if element.tag.endswith(tag):
        yield element
    for child in element:
        for g in get_element_by_tag(child, tag):
            yield g

这只是检查与结束标记tag ,即忽略任何领先的命名空间。 然后,您可以遍历你想要如下任何标签:

for item in get_element_by_tag(elemettree, 'technicalContact'):
    ...

该发电机在行动:

>>> xml_str = """<root xmlns="http://www.example.com">
... <technicalContact>Test1</technicalContact>
... <technicalContact>Test2</technicalContact>
... </root>
... """

xml_etree = etree.fromstring(xml_str)

>>> for item in get_element_by_tag(xml_etree, 'technicalContact')
...     print item.tag, item.text
... 
{http://www.example.com}technicalContact Test1
{http://www.example.com}technicalContact Test2


Answer 2:

我一直使用类似落得

item.tag.split("}")[1][0:]


文章来源: Python: Ignore xmlns in elementtree.ElementTree