如何使用以下方式生成和解析XML lxml?
<s:Envelope xmlns:s="a" xmlns:a="http_//www.w3.org/2005/08/addressing">
....
</s:Envelope>
Run Code Online (Sandbox Code Playgroud)
我当前交换:当我解析并生成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'})
Run Code Online (Sandbox Code Playgroud)
请注意,这完全等同于:
envelope = doc.xpath('//x:Envelope',
namespaces={'x': 'a'})
Run Code Online (Sandbox Code Playgroud)
也就是说,名称空间前缀不必与源XML文档中使用的名称前缀相匹配; 只有绝对名称空间很重要.
您可以在此处阅读有关LXML和命名空间的更多信息.