2010-12-13 3 views
3

接頭辞なしで名前空間を追加する方法はあります(これらのns0、ns1を意味します)。それぞれに対応したソリューションですか?要素 lxml.etreeとxml.etree.ElementTree接頭辞なしの名前空間を追加する(ns0、ns1など)

  • (C)ElementTreeの(のpython 2.6+)のnsMapに引数 - - 接頭
  • として空の文字列と名前空間のメソッドを登録

    • lxmlの:今私はのためのソリューションを持っているために

    問題は、(c)Python 2.5のElementTreeですが、_namespace_map属性がありますが、空の文字列に設定して無効なXMLを作成し、None addin gのデフォルトのns0などの名前空間は、そこに任意の実用的な解決策はありますか?

    私は

    Element('foo', {'xmlns': 'http://my_namespace_url.org/my_ns'}) 
    

    を推測は悪い考えですか?

    ありがとうございました

    答えて

    3

    私はちょうどあなたを回避しています。

    は独自の接頭辞を定義します。

    unique = 'bflmpsvz' 
    
    my_namespaces = { 
           'http://www.topografix.com/GPX/1/0' : unique, 
           'http://www.groundspeak.com/cache/1/0' : 'groundspeak', 
           } 
    xml.etree.ElementTree._namespace_map.update(my_namespaces) 
    

    そして、置き換え/出力に接頭辞を削除します。

    def writeDown(data, output_filename): 
    
        data.write(output_filename) 
        txt = file(output_filename).read() 
        txt = txt.replace(unique+':','') 
        file(output_filename,'w').write(txt) 
    

    おそらく、よりよい解決策があります。

    +0

    私のスクリプトからcut'n'pasteコード... –

    1

    私は智異山のアイデアを使用しますが、独自のは、デフォルトの名前空間であるとき、私は場合には、余分な行を追加しました:

    def writeDown(data, output_filename): 
    
        data.write(output_filename) 
        txt = file(output_filename).read() 
        txt = txt.replace(unique+':','') 
        txt = txt.replace('xmlns:'+unique,'xmlns') 
        file(output_filename,'w').write(txt) 
    
    1

    私は私のためのPython 3.3.1と、次の作品を使用しています:

    プライベートxml.etree.ElementTree._namespace_mapには、Jiriという名前でアクセスする必要はありません。

    これはPython 2.7.4でも利用可能です。

    +0

    これはOPが使用するlxmlでは動作しませんか? –

    +0

    申し訳ありませんが、分かりません。それはしばらくしている! – sferencik

    関連する問題