次のような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と名前空間について詳しくは、こちらをご覧ください。