我有一个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传递给解析器可以防止这种情况。
有什么想法吗?
来自https://bitbucket.org/olauzanne/pyquery/issue/17的最后一个解决方案可以帮助您轻松避免名称空间
对于您的情况,请尝试
xml.replace(' xmlns="', ' xmlnamespace="')
。但是,如果实体中也需要字符串,则可能需要更复杂的内容。尝试使用Xpath:
从this page中的“xpath()方法”部分获取(并简化)
可以使用
xpath
方法找到命名空间感知节点:如果确实要删除名称空间,可以使用XSL转换:
这里我们看到命名空间已被删除:
所以现在可以通过以下方式找到Body节点:
相关问题 更多 >
编程相关推荐