2012-07-11 12 views
11

Ich verwende Python xml.etree.ElementTree, um einige XML-Parsing für eine Datei zu tun. Allerdings bekomme ich diesen Fehler auf halbem Weg durch das Dokument:XML Parsing in Python: Expatrieror nicht wohlgeformt

xml.parsers.expat.ExpatError: not well-formed (invalid token): line X, column Y 

So gehe ich X, Y Spalte in vim auszukleiden, und ich sehe ein kaufmännisches (&) mit rotem Hintergrund hervorgehoben. Was bedeutet das?

Auch die beiden vorangestellten Zeichen sind >>, also vielleicht gibt es etwas Besonderes über >>&?

Wer weiß, wie man das beheben kann?

Antwort

12

Die & ist ein Sonderzeichen in XML, das für Zeichenelemente verwendet wird. Wenn Ihr XML-Code & selbst enthält, nicht als Teil einer Entität wie & oder ѐ oder dergleichen, dann ist das XML ungültig.

+0

ich glaube, das Problem könnte sein, dass ich ein mehrzeiliges (string) Element. Im Wesentlichen für dieses eine Element habe ich einen Grep (Regex) | Kopf -5, um 5 Zeilen zurück zu bekommen, dann steckte es in der Datei als XML-Element. Wäre es besser, irgendwie 5 separate Elemente zu machen? – JDS

+0

Es kommt nicht darauf an, wie viele Elemente darin enthalten sind, es kommt darauf an, welche Zeichen darin enthalten sind. Sie können das Zeichen & einfach nicht in ein XML-Dokument einfügen. Sie müssen entkommen, indem Sie es durch '&' ersetzen. – BrenBarn

+0

ein wenig Text & das Zeichen ist nicht gut, sagst du? Auch ich lese in diesen Zeilen aus vielen verschiedenen Dateien, so bin ich mir nicht sicher, wie ich ihnen automatisch entkommen könnte (aus einem Bash-Skript mit grep lesen und dann in eine Datei ausgegeben) – JDS

0

Ich löse es durch yattag anstelle

from yattag import indent 
print indent(xml_string.encode('utf-8'))