1

如何使用以下方式生成和解析 XML lxml

<s:Envelope xmlns:s="a" xmlns:a="http_//www.w3.org/2005/08/addressing">
....
</s:Envelope>

我目前在解析和生成 XML 时在元素名称中使用 _ 交换 : ,但这似乎很愚蠢。

4

1 回答 1

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'})

请注意,这完全等同于:

envelope = doc.xpath('//x:Envelope',
  namespaces={'x': 'a'})

也就是说,名称空间前缀不必与源 XML 文档中使用的匹配;只有绝对命名空间很重要。

您可以在此处阅读有关 LXML 和名称空间的更多信息。

于 2012-05-02T16:02:45.033 回答