2010-12-13 152 views
3

有任何溶液添加名稱空間而無需前綴(我的意思是這些NS0,NS1),其工作在所有etree實現或有每個人都在爲解決方案工作?lxml.etree和xml.etree.ElementTree添加名稱空間而無需前綴(NS0,NS1等)

現在我有一個解決方案:

  • LXML - 元
  • (C)的ElementTree(蟒蛇2.6+)的nsmap說法 - 與空字符串作爲前綴
  • 註冊命名方法

問題是(c)python 2.5中的ElementTree,我知道有_namespace_map屬性,但將它設置爲空字符串,創建無效XML,將其設置爲None外接程序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代碼從我的腳本... – 2010-12-13 12:47:32

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.register_namespace('', 'http://your/uri') 
data.write(output_filename) 

好處是您不必訪問建議的Jiri專用xml.etree.ElementTree.namespace_map。

我看到同樣也可以在Python 2.7.4。

+0

這並不與該OP使用lxml的工作,不是嗎? – 2016-12-04 16:07:36

+0

對不起,不知道;有一陣子了! – sferencik 2016-12-05 06:59:00

相關問題