默认情况下,当您调用ElementTree.parse(someXMLfile)时,Python ElementTree库会用Clark表示法中的名称空间URI作为每个解析节点的前缀:
{http://example.org/namespace/spec}mynode
这使得在后面的代码中按名称访问特定节点成为一个巨大的痛苦。
我已经阅读了ElementTree和名称空间上的文档,看起来iterparse()
函数应该允许我改变解析器给名称空间加前缀的方式,但就我的生命而言,实际上我不能让它改变前缀。这似乎可能发生在ns start事件之前的后台,甚至在本例中引发:
for event, elem in iterparse(source):
if event == "start-ns":
namespaces.append(elem)
elif event == "end-ns":
namespaces.pop()
else:
...
如何更改前缀行为以及函数结束时返回的正确内容?
您不需要特别使用
iterparse
。相反,以下脚本:产生
它显示了如何访问解析树中各个节点的完全限定标记名。你应该能够适应你的特殊需要。
根据文档,xml.etree.ElementTree似乎没有fixtag。不过,我已经看过fixtag的一些源代码,您可以这样做:
looktag中有适合查找的标记字符串。命名空间在命名空间中。
相关问题 更多 >
编程相关推荐