首页 > 解决方案 > 解析在同一元素中定义元素前缀的 XML

问题描述

我有一个带有如下元素的 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因为prefix在到达 XML 中的此元素之前未定义。

有没有办法获取元素?

标签: pythonxmlxml-parsinglxmlxml-namespaces

解决方案


就像评论中提到的那样,您可以用来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


推荐阅读