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}Envelopea:名前空間プレフィックスも定義したため、サンプルドキュメントはやや混乱します。

  • a:Element{http://www.w3.org/2005/08/addressing}Element、、およびと同等です
  • s:Elementと同等{a}Elementです。

LXMLコマンドの多くでは、名前空間プレフィックスマッピングを提供できます。たとえば、EnvelopeXPATHを使用してドキュメント内の要素を検索するには、次のようにします。

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 に答える