解析XML,其中元素前缀在同一元素中定义

时间:2018-05-17 09:05:17

标签: python xml xml-parsing lxml xml-namespaces

我有一个XML文件,其元素如下所示:

<wrapping_element>
    <prefix:tag xmlns:prefix="url">value</prefix:tag>
</wrapping_element>

我想获得这个元素,所以我使用lxml如下:

wrapping_element.find('prefix:tag', wrapping_element.nsmap)

但是我收到以下错误:SyntaxError: prefix 'prefix' not found in prefix map因为在到达XML中的此元素之前未定义prefix

还有办法获得元素吗?

1 个答案:

答案 0 :(得分:1)

如评论中所述,可能使用local-name()来绕过命名空间,但只需直接在xpath()中处理命名空间就足够了调用...

from lxml import etree

tree = etree.parse("input.xml")

wrapping_element = tree.xpath("/wrapping_element")[0]
tag = wrapping_element.xpath("x:tag", namespaces={"x": "url"})[0]

print(etree.tostring(tag, encoding="unicode"))

这将打印...

<prefix:tag xmlns:prefix="url">value</prefix:tag>

注意我使用了前缀x。前缀可以匹配XML文件中的前缀,但它不必;只有名称空间URI需要完全匹配。

请点击此处了解详情:http://lxml.de/xpathxslt.html#namespaces-and-prefixes