【问题标题】:how to use xml.sax.saxutils.XMLGenerator to write an element with a namespace如何使用 xml.sax.saxutils.XMLGenerator 编写具有命名空间的元素
【发布时间】:2016-06-16 00:05:58
【问题描述】:

我使用过 XMLGenerator 来编写东西,但似乎无法弄清楚如何使用命名空间。我不断收到 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\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'

【问题讨论】:

    标签: python xml sax


    【解决方案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())
    

    xmlgen.startPrefixMapping 似乎是必要的。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多