我有一个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
。
还有办法获得元素吗?
答案 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