如何使用 xml.sax.saxutils.XMLGenerator 编写带有命名空间的元素
how to use xml.sax.saxutils.XMLGenerator to write an element with a namespace
我已经使用 XMLGenerator 编写了一些东西,但似乎无法弄清楚如何使用 namsepaces。我一直收到 KeyErrors。
我想写一个简单的例子
<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.6.0\envs\emblaze\lib\xml\sax\saxutils.py", line 169, in startElementNS
self._write(u'<' + self._qname(name))
File "c:\app\python\anaconda.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'
查看文档似乎表明您需要类似的东西:
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
好像是必须的
我已经使用 XMLGenerator 编写了一些东西,但似乎无法弄清楚如何使用 namsepaces。我一直收到 KeyErrors。
我想写一个简单的例子
<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.6.0\envs\emblaze\lib\xml\sax\saxutils.py", line 169, in startElementNS
self._write(u'<' + self._qname(name))
File "c:\app\python\anaconda.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'
查看文档似乎表明您需要类似的东西:
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
好像是必须的