3

プレフィックスなしで名前空間を追加するソリューションはありますか (つまり、これらの ns0、ns1 を意味します)。これはすべての etree 実装で機能しますか、またはそれぞれに機能するソリューションがありますか

今のところ、次の解決策があります。

  • lxml - Element の nsmap 引数
  • (c)ElementTree (python 2.6+) - プレフィックスとして空の文字列を使用して名前空間メソッドを登録します

問題は (c) Python 2.5 の ElementTree です。_namespace_map 属性があることは知っていますが、空の文字列に設定すると無効な XML が作成され、None に設定するとデフォルトの ns0 などの名前空間が追加されます。有効な解決策はありますか?

私は推測する

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

悪い考えですか?

手伝ってくれてありがとう

4

3 に答える 3

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)

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

于 2010-12-13T12:46:36.187 に答える
1

私は Jiri のアイデアを使用しましたが、unique がデフォルトの名前空間でもある場合に備えて、次の行を追加しました。

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)
于 2012-02-01T23:34:38.570 に答える
0

私はPython 3.3.1を使用していますが、次のように動作します:

xml.etree.ElementTree.register_namespace('', 'http://your/uri')
data.write(output_filename)

利点は、 Jiriが提案したように、プライベート xml.etree.ElementTree._namespace_map にアクセスする必要がないことです。

Python 2.7.4 でも同じことが利用できるようです。

于 2013-07-24T10:19:24.527 に答える