2010-12-13 127 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

相关问题