我有一个 xml 文档,我正在尝试使用 Etree.lxml 进行解析
<Envelope xmlns="http://www.example.com/zzz/yyy">
<Header>
<Version>1</Version>
</Header>
<Body>
some stuff
<Body>
<Envelope>
我的代码是:
path = "path to xml file"
from lxml import etree as ET
parser = ET.XMLParser(ns_clean=True)
dom = ET.parse(path, parser)
dom.getroot()
当我尝试获取 dom.getroot() 时,我得到:
<Element {http://www.example.com/zzz/yyy}Envelope at 28adacac>
但是我只想:
<Element Envelope at 28adacac>
当我做
dom.getroot().find("Body")
我没有得到任何回报。然而,当我
dom.getroot().find("{http://www.example.com/zzz/yyy}Body")
我得到一个结果。
我认为将 ns_clean=True 传递给解析器会阻止这种情况。
有任何想法吗?
原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
xpath
方法找到命名空间感知节点:如果你真的想删除命名空间,你可以使用 XSL 转换:
在这里我们看到名称空间已被删除:
所以你现在可以通过这种方式找到 Body 节点: