2024-10-03 21:29:20 发布
网友
我正在从python生成一个xml文档。我们正在使用xml.dom文件包来创建xml文档。我们遇到了一个问题,我们想要生成一个φ字符&x03c6。但是,当我们将该字符串放在文本节点中并对其调用toxml()时,我们得到的是&;x03c6;。我们目前的解决方案是使用萨克斯utils.unescape(),但这并不理想,因为我们需要解析xml两次。在
有没有办法让dom包将“&;x03c6;”识别为xml字符?在
我认为您需要使用一个包含\u03c6的Unicode字符串,因为据我所知,文本节点的.data字段应该是“解析”的数据,而不包括XML实体(当将&还原为XML时,&就是在这里)。如果要确保输出时非ascii字符表示为实体,可以执行以下操作:
\u03c6
.data
&
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')。在
x.toxml().encode('ascii', 'ent_replace')
我认为您需要使用一个包含
\u03c6
的Unicode字符串,因为据我所知,文本节点的.data
字段应该是“解析”的数据,而不包括XML实体(当将&
还原为XML时,&
就是在这里)。如果要确保输出时非ascii字符表示为实体,可以执行以下操作:并使用
x.toxml().encode('ascii', 'ent_replace')
。在相关问题 更多 >
编程相关推荐