首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用Python中的ElementTree更改名称空间前缀?

如何用Python中的ElementTree更改名称空间前缀?
EN

Stack Overflow用户
提问于 2018-02-05 23:48:34
回答 2查看 0关注 0票数 0

默认情况下,当您调用ElementTree.parse时,PythonElementTree库会在每个已解析节点的前面加上标记中的名称空间URI:

代码语言:txt
复制
    {http://example.org/namespace/spec}mynode

这使得在代码后面按名称访问特定节点是一个巨大的痛苦。

我已经阅读了ElementTree和名称空间上的文档,它看起来像iterparse()函数应该允许我改变解析器对名称空间的前缀方式,但我实际上不能让它更改前缀。在ns-start事件发生之前的背景中,这种情况似乎会发生,就像下面的示例所示:

代码语言:txt
复制
for event, elem in iterparse(source):
    if event == "start-ns":
        namespaces.append(elem)
    elif event == "end-ns":
        namespaces.pop()
    else:
        ...

如何使它改变前缀行为,以及函数结束时返回的正确内容是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-02-06 08:31:47

你不需要特别使用iterparse.相反,以下脚本:

代码语言:txt
复制
from cStringIO import StringIO
import xml.etree.ElementTree as ET

NS_MAP = {
    'http://www.red-dove.com/ns/abc' : 'rdc',
    'http://www.adobe.com/2006/mxml' : 'mx',
    'http://www.red-dove.com/ns/def' : 'oth',
}

DATA = '''<?xml version="1.0" encoding="utf-8"?>
<rdc:container xmlns:mx="http://www.adobe.com/2006/mxml"
                 xmlns:rdc="http://www.red-dove.com/ns/abc"
                 xmlns:oth="http://www.red-dove.com/ns/def">
  <mx:Style>
    <oth:style1/>
  </mx:Style>
  <mx:Style>
    <oth:style2/>
  </mx:Style>
  <mx:Style>
    <oth:style3/>
  </mx:Style>
</rdc:container>'''

tree = ET.parse(StringIO(DATA))
some_node = tree.getroot().getchildren()[1]
print ET.fixtag(some_node.tag, NS_MAP)
some_node = some_node.getchildren()[0]
print ET.fixtag(some_node.tag, NS_MAP)

输出:

代码语言:txt
复制
('mx:Style', None)
('oth:style2', None)

它显示了如何访问解析树中各个节点的完全限定标记名。

票数 0
EN

Stack Overflow用户

发布于 2018-02-06 09:40:15

etree.ElementTree似乎没有固定标签。您可以这样做:

代码语言:txt
复制
import xml.etree.ElementTree as ET

for event, elem in ET.iterparse(inFile, events=("start", "end")):
    namespace, looktag = string.split(elem.tag[1:], "}", 1)

查找标记中有标记字符串,适合查找。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007339

复制
相关文章

相似问题

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