如何使用以下方式生成和解析 XML lxml
?
<s:Envelope xmlns:s="a" xmlns:a="http_//www.w3.org/2005/08/addressing">
....
</s:Envelope>
我目前在解析和生成 XML 时在元素名称中使用 _ 交换 : ,但这似乎很愚蠢。
目前尚不清楚您要问什么,但也许这会有所帮助:
诸如<s:Envelope>
使用 XML 命名空间前缀的元素。这用于表示s:Envelope
该文档中的属性是在a
命名空间中定义的。
LXML 使用大括号中的命名空间前缀表示 XML 命名空间,例如:{a}Envelope
. 您的示例文档有点令人困惑,因为您还定义了a:
命名空间前缀,所以:
a:Element
等价于{http://www.w3.org/2005/08/addressing}Element
, 并且s:Element
相当于{a}Element
。许多 LXML 命令允许您提供名称空间前缀映射。例如,要Envelope
使用 XPATH 在文档中查找元素,您可以这样做:
import lxml.etree as etree
doc = etree.parse('mydocument.xml')
envelope = doc.xpath('//s:Envelope',
namespaces={'s': 'a'})
请注意,这完全等同于:
envelope = doc.xpath('//x:Envelope',
namespaces={'x': 'a'})
也就是说,名称空间前缀不必与源 XML 文档中使用的匹配;只有绝对命名空间很重要。
您可以在此处阅读有关 LXML 和名称空间的更多信息。