代码之家  ›  专栏  ›  技术社区  ›  Thomas Sidoti

python xml.dom中的XML字符

  •  1
  • Thomas Sidoti  · 技术社区  · 15 年前

    我正致力于从Python生成一个XML文档。我们正在使用xml.dom包创建XML文档。我们遇到了一个问题,需要生成一个字符&X03C6;,它是一个φ。但是,当我们将该字符串放入文本节点并对其调用toxml()时,我们会得到&x03c6;。我们目前的解决方案是对to xml()的结果使用saxutils.unescape(),但这并不理想,因为我们必须对XML进行两次解析。

    有没有办法让dom包将“&x03c6;”识别为XML字符?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Alex Martelli    15 年前

    我认为您需要使用Unicode字符串 \u03c6 在里面,因为 .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') .