Ada*_*tan 15 python xml elementtree xml-namespaces
有没有办法忽略tage名称中的XML命名空间elementtree.ElementTree?
我尝试打印所有technicalContact标签:
for item in root.getiterator(tag='{http://www.example.com}technicalContact'):
print item.tag, item.text
Run Code Online (Sandbox Code Playgroud)
我得到类似的东西:
{http://www.example.com}technicalContact blah@example.com
Run Code Online (Sandbox Code Playgroud)
但我真正想要的是:
technicalContact blah@example.com
Run Code Online (Sandbox Code Playgroud)
有没有办法只显示后缀(sans xmlns),或更好 - 迭代元素而不明确说明xmlns?
您可以定义生成器以递归方式搜索元素树,以查找以相应标记名称结尾的标记.例如,像这样:
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
Run Code Online (Sandbox Code Playgroud)
这只是检查结束的标记tag,即忽略任何前导命名空间.然后,您可以迭代所需的任何标记,如下所示:
for item in get_element_by_tag(elemettree, 'technicalContact'):
...
Run Code Online (Sandbox Code Playgroud)
这个生成器在行动:
>>> 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
Run Code Online (Sandbox Code Playgroud)