如何使用lxml在XML元素名称中使用":"?

Bdf*_*dfy 1 python lxml

如何使用以下方式生成和解析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时,在元素名称中使用_,但它似乎很愚蠢.

lar*_*sks 7

目前尚不清楚你究竟在问什么,但也许这会有所帮助:

一个元素,例如<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和命名空间的更多信息.