2010-10-09 68 views
21

我在Python 2.7中使用ElementTree構建SVG文檔。下面是代碼:使用Python創建不帶ns0命名空間的SVG/XML文檔ElementTree

from xml.etree import ElementTree as etree 

root = etree.XML('<svg width="100%" height="100%" version="1.1" xmlns="http://www.w3.org/2000/svg"></svg>') 
root.append(etree.Element("path")) 
root[0].set("d", "M1 1 L2 2 Z") 
print etree.tostring(root, encoding='iso-8859-1') 

這將生成的輸出:

<?xml version='1.0' encoding='iso-8859-1'?> 
<ns0:svg xmlns:ns0="http://www.w3.org/2000/svg" height="100%" version="1.1" width="100%"><path d="M1 1 L2 2 Z" /></ns0:svg> 

這並不解析爲有效的SVG。 如何刪除ns0命名空間?

回答

45

我想通了,我不能所以這裏是刪除的問題:

etree.register_namespace("","http://www.w3.org/2000/svg") 

我認爲這只是作品的Python 2.7雖然的。

+13

回答自己的問題是不是刪除它好得多。如果有人以後有這個問題,它已經被回答和索引! – codekaizen 2010-10-09 06:47:25

+0

如果您需要與較老的Pythons兼容(或者即使您不需要),您最好使用['lxml.etree'](http://classespeak.net/lxml/tutorial.html):這更多或者更少的是'xml.etree'提供的超集。雖然有一些外部依賴性。 – intuited 2010-10-09 06:51:42

+0

lxml因無法在OS X開箱即用而臭名昭着。他們沒有爲英特爾的Mac提供預編譯的egg,並試圖從頭編譯它非常困難。讓它快速工作的唯一方法是如果你使用的macport,我不覺得它是可接受的依賴。 – jfenwick 2010-10-09 17:13:28

0

下面是我用lxml做的。從這裏

from lxml import etree 
svg_tree = etree.fromstring(svg_str, parser=etree.XMLParser()) 
etree.tostring(svg_tree) 

二手示例代碼: lxml-removing-xml-tags-when-parsing