首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:忽略elementtree.ElementTree中的xmlns

Python:忽略elementtree.ElementTree中的xmlns
EN

Stack Overflow用户
提问于 2012-06-27 20:30:26
回答 2查看 8.3K关注 0票数 16

有没有一种方法可以忽略elementtree.ElementTree中阶段名称中的XML名称空间?

我尝试打印所有technicalContact标记:

代码语言:javascript
复制
for item in root.getiterator(tag='{http://www.example.com}technicalContact'):
        print item.tag, item.text

我得到了一些类似的东西:

代码语言:javascript
复制
{http://www.example.com}technicalContact blah@example.com

但我真正想要的是:

代码语言:javascript
复制
technicalContact blah@example.com

有没有办法只显示后缀(sans xmlns),或者在不显式声明xmlns的情况下更好地迭代元素?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 21:25:57

您可以定义一个生成器来递归地搜索您的元素树,以便找到以适当的标记名称结尾的标记。例如,如下所示:

代码语言:javascript
复制
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结尾的标签,即忽略任何前导名称空间。然后,您可以遍历任何您想要的标记,如下所示:

代码语言:javascript
复制
for item in get_element_by_tag(elemettree, 'technicalContact'):
    ...

这个生成器正在运行:

代码语言:javascript
复制
>>> 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
票数 8
EN

Stack Overflow用户

发布于 2012-06-27 21:00:24

我总是以这样的方式结束

代码语言:javascript
复制
item.tag.split("}")[1][0:]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11226247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档