2009-05-31 7 views
1

Ich arbeite an der Erstellung eines XML-Dokuments von Python. Wir verwenden das Paket xml.dom, um das XML-Dokument zu erstellen. Wir haben ein Problem, bei dem wir das Zeichen & # x03c6; Das ist ein & # x03c6 ;. Wenn wir diese Zeichenfolge jedoch in einen Textknoten einfügen und toxml() aufrufen, erhalten wir & amp; # x03c6 ;. Unsere aktuelle Lösung ist es, saxutils.unescape() auf das Ergebnis von toxml() anzuwenden, aber das ist nicht ideal, weil wir das XML zweimal analysieren müssen.XML-Zeichen in python xml.dom

Gibt es eine Möglichkeit, das dom-Paket zu erkennen "& # x03c6;" als XML-Zeichen?

Antwort

1

Ich glaube, Sie brauchen einen Unicode-String mit \u03c6 in es zu benutzen, weil das .data Feld eines Textknoten soll (soweit ich verstehen) „analysiert“ Daten sein, nicht XML-Entitäten einschließlich (woher die & wenn es zurück in XML gemacht wird). Wenn Sie sicherstellen möchten, dass am Ausgang werden nicht-ASCII-Zeichen als Entitäten ausgedrückt, könnten Sie tun:

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) 

und x.toxml().encode('ascii', 'ent_replace') verwenden.