Pythonの:lxmlの中に名前空間を追加します
-
21-08-2019 - |
質問
私が使用して名前空間を指定しようとしているのlxmlのの<のhref = "から取られたこの例(に似http://www.maconstateit.net/tutorials/XML/XML03/xml03-ここを01.htm」のrel = "nofollowをnoreferrer">):
<TreeInventory xsi:noNamespaceSchemaLocation="Trees.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</TreeInventory>
私は、使用するスキーマのインスタンスと、スキーマの場所を追加するかどうかはわかりません。 私を得たのドキュメントのようなものをすることによって、開始します:
>>> NS = 'http://www.w3.org/2001/XMLSchema-instance'
>>> TREE = '{%s}' % NS
>>> NSMAP = {None: NS}
>>> tree = etree.Element(TREE + 'TreeInventory', nsmap=NSMAP)
>>> etree.tostring(tree, pretty_print=True)
'<TreeInventory xmlns="http://www.w3.org/2001/XMLSchema-instance"/>\n'
私はしかし、インスタンスを指定し、また、場所を指定するかどうかはわかりません。これはnsmap
でetree.Element
キーワード、引数で行うことができるように思えるが、私はどのように表示されません。
解決
いくつかのより多くのステップでは、明確にするためます:
>>> NS = 'http://www.w3.org/2001/XMLSchema-instance'
私の知る限り見ることができるように、それはあなたが、ないnoNameSpaceSchemaLocation
要素を名前空間たい属性TreeInventory
です。だから、ます:
>>> location_attribute = '{%s}noNameSpaceSchemaLocation' % NS
>>> elem = etree.Element('TreeInventory', attrib={location_attribute: 'Trees.xsd'})
>>> etree.tostring(elem, pretty_print=True)
'<TreeInventory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Trees.xsd"/>\n'
これは、あなたが何を望むかのように見えます... あなたはもちろん、このように、属性なしで、最初の要素を作成し、属性を設定することができます:
>>> elem = etree.Element('TreeInventory')
>>> elem.set(location_attribute, 'Trees.xsd')
nsmap
パラメータについて:私は、唯一のシリアル化に使用する接頭辞を定義するために使用されると信じています。 lxmlのが問題の名前空間のための一般的に使用されるプレフィックスは「XSI」であることを知っているので、この場合には、必要とされていません。それはいくつかのよく知られている名前空間がなかった場合、あなたが好ま接頭辞どの指定しない限り、あなたはおそらく、...「NS0」、「NS1」などのような接頭辞を見るでしょう。 (覚えている:接頭辞は関係することになっていません)。