2009-05-31 7 views
1

私はPythonからXML文書を作成しています。 xml.domパッケージを使用してxmlドキュメントを作成しています。私たちは文字を生成したいところに問題がありますφ φです。しかし、その文字列をテキストノードに置き、toxml()を呼び出すと& amp;#x03c6;となります。現在の解決策は、toxml()の結果にsaxutils.unescape()を使用することですが、xmlを2回解析する必要があるため、これは理想的ではありません。PythonのXML文字xml.dom

domパッケージに「φ」と認識されるようになっていますか? XML文字として?

答えて

1

私は&そこから(テキストノードの.dataフィールドを想定しているので、XMLエンティティを含まないデータを、「解析された」ことを(私の知る限り理解し)、それに\u03c6でUnicode文字列を使用する必要があると思います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')を使用しています。