python xml.dom中的XML字符

时间:2009-05-31 22:16:45

标签: python xml dom

我正在从python生成一个xml文档。我们使用xml.dom包来创建xml文档。我们遇到了一个问题,我们想要制作角色φ这是一个φ。但是,当我们将该字符串放在文本节点中并在其上调用toxml()时,我们得到& amp;#x03c6;。我们当前的解决方案是在toxml()的结果上使用saxutils.unescape()但这并不理想,因为我们必须解析xml两次。

有没有办法让dom包识别“φ”作为xml角色?

1 个答案:

答案 0 :(得分:1)

我认为你需要在其中使用带有\u03c6的Unicode字符串,因为假设文本节点的.data字段(据我所知)是“解析”数据,而不是包括XML实体(当&重新生成XML时)。如果要确保在输出时将非ascii字符表示为实体,则可以执行以下操作:

import codecs

def ent_replace(exc):
  if isinstance(exc, (UnicodeEncodeError, UnicodeTranslateError)):
    s = []
    for c in exc.object[exc.start:exc.end]:
      s.append(u'&#x%4.4x;' % ord(c))
    return (''.join(s), exc.end)
  else:
    raise TypeError("can't handle %s" % exc.__name__)

codecs.register_error('ent_replace', ent_replace)

并使用x.toxml().encode('ascii', 'ent_replace')