2016-03-02 80 views
1

我已經使用XMLGenerator編寫東西,但似乎無法弄清楚如何使用namsepaces。我不斷收到KeyErrors。如何使用xml.sax.saxutils.XMLGenerator寫一個名稱空間的元素

就像一個簡單的例子,我想寫出

<svg width="120" height="120" 
    viewBox="0 0 120 120" 
    xmlns="http://www.w3.org/2000/svg"> 

    <rect x="10" y="10" 
     width="100" height="100" 
     rx="15" ry="15"/> 

</svg> 

我應該如何調用startElementNS?

xmlgen.startElementNS(('http://www.w3.org/2000/svg','svg'),'svg',{}) 

給了我這個錯誤:

File "c:\app\python\anaconda\1.6.0\envs\emblaze\lib\xml\sax\saxutils.py", line 169, in startElementNS 
    self._write(u'<' + self._qname(name)) 
    File "c:\app\python\anaconda\1.6.0\envs\emblaze\lib\xml\sax\saxutils.py", line 134, in _qname 
    prefix = self._current_context[name[0]] 
KeyError: 'http://www.w3.org/2000/svg' 

回答

1

望着文檔似乎暗示你需要的東西,如:

from tempfile import TemporaryFile 
f = TemporaryFile() 
ns = "http://www.w3.org/2000/svg" 
xmlgen = XMLGenerator(f) 
xmlgen.startDocument() 
xmlgen.startPrefixMapping("ns1", ns) 
xmlgen.startElementNS((ns, "svg"), "ns1:svg", {}) 
f.seek(0) 
print(f.read()) 
<?xml version="1.0" encoding="iso-8859-1"?> 
<ns1:svg xmlns:ns1="http://www.w3.org/2000/svg"> 

xmlgen.startPrefixMapping似乎是必要的。

+0

很酷,謝謝。哪些文檔?我找不到它。 –

+0

有沒有辦法讓它只打印'

+1

是的,'xmlgen.startPrefixMapping(None,ns)' –

相關問題