41 Stimmen

Escape-Zeichenfolgen zur Verwendung in XML

Ich verwende Pythons xml.dom.minidom um ein XML-Dokument zu erstellen. (Logische Struktur -> XML-String, nicht umgekehrt.)

Wie kann ich dafür sorgen, dass die von mir bereitgestellten Zeichenfolgen entkommen, damit sie das XML nicht durcheinanderbringen können?

4voto

johndodo Punkte 15249

Wenn Sie kein weiteres Projekt importieren möchten und bereits über cgi können Sie dies verwenden:

>>> import cgi
>>> cgi.escape("< & >")
'&lt; &amp; &gt;'

Beachten Sie jedoch, dass bei diesem Code die Lesbarkeit leidet - Sie sollten ihn wahrscheinlich in eine Funktion packen, um Ihre Absicht besser zu beschreiben: (und schreiben Sie Unit-Tests für ihn, wenn Sie schon dabei sind ;)

def xml_escape(s):
    return cgi.escape(s) # escapes "<", ">" and "&"

2voto

Pugsley Punkte 837
xml_special_chars = {
    "<": "&lt;",
    ">": "&gt;",
    "&": "&amp;",
    "'": "&apos;",
    '"': "&quot;",
}

xml_special_chars_re = re.compile("({})".format("|".join(xml_special_chars)))

def escape_xml_special_chars(unescaped):
    return xml_special_chars_re.sub(lambda match: xml_special_chars[match.group(0)], unescaped)

Die ganze Magie geschieht in re.sub() : Argument repl akzeptiert nicht nur Zeichenketten, sondern auch Funktionen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X