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