2011-12-08 10 views
4

lxml.etreeを使用してJSONオブジェクトからxmlツリーを作成しようとしています。以下のような彼らのコロンのCONTINタグ名の一部何か: -lxmlタグ名に ":"を付けたもの

「設定:現在の」私はタグ名として「{設定}現在」を

を使用してみましたが、私はこれを取得: -

NS0を:現在のxmlns:ns0 = "設定"

+1

は学ぶためにいくつかの時間を取りますXML名前空間の基礎。次にhttp://lxml.de/tutorial.html#namespacesを読んでください。 – mzjn

答えて

6

はい、まずXMLネームスペースを読み、理解してください。

>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace'} 
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings'], nsmap=MY_NAMESPACES) 
>>> etree.tostring(e) 
'<settings:current xmlns:settings="http://example.com/url-for-settings-namespace"/>' 

Uをそして、あなたはあなたがあなたのXMLツリーにnsmap=MY_NAMESPACESを持つ要素を持っている必要があること、デフォルトの名前空間を持つ

>>> MY_NAMESPACES={'settings': 'http://example.com/url-for-settings-namespace', None: 'http://example.com/url-for-default-namespace'} 
>>> r=etree.Element('my-root', nsmap=MY_NAMESPACES) 
>>> d=etree.Element('{%s}some-element' % MY_NAMESPACES[None]) 
>>> e=etree.Element('{%s}current' % MY_NAMESPACES['settings']) 
>>> d.append(e) 
>>> r.append(d) 
>>> etree.tostring(r) 
'<my-root xmlns:settings="http://example.com/url-for-settings-namespace" xmlns="http://example.com/url-for-default-namespace"><some-element><settings:current/></some-element></my-root>' 

そのノートを、組み合わせることができます。そして、名前空間とXMLツリーを生成するためにそれを使用階層。その後、すべての子孫ノードがその宣言を使用できます。あなたのケースでは、あなたにはそのビットを持っていないので、lxmlのはns0

のような名前空間名はまた、あなたがタグ名のために新しいノードを使用する名前空間URIを作成するときに、名前を名前空間ではない生成:{http://example.com/url-for-settings-namespace}current

関連する問題