2012-07-11 12 views
11

Używam Pythona xml.etree.ElementTree zrobić kilka parsowania XML na plik. Jednak uzyskać ten błąd w połowie drogi w dokumencie:parsowania XML w Pythonie: expaterror nie dobrze uformowane

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

Więc idę do linii X, Y kolumny w vim i widzę ampersanda (&) z czerwonym tle podkreślając. Co to znaczy?

Również dwie poprzedzające je znaki to >>, więc może jest coś wyjątkowego w przypadku >>&?

Ktoś wie, jak to naprawić?

Odpowiedz

12

& jest specjalny znak w formacie XML, stosowany do encji znakowych. Jeśli Twój plik XML ma osobną partycję &, a nie jako część jednostki, takiej jak & lub ѐ lub tym podobnych, wówczas kod XML jest nieprawidłowy.

+0

Myślę, że problem może być, że mam wielu linii (String) element. Zasadniczo dla tego jednego elementu zrobiłem grep (regex) | head -5, aby odzyskać 5 linii, a następnie umieścić go w pliku jako element xml. Czy w jakiś sposób lepiej byłoby zrobić 5 oddzielnych elementów? – JDS

+0

Nie chodzi o to, ile elementów w nim jest, ale o to, jakie są w nim postacie. Po prostu nie możesz sam umieścić znaku & w dokumencie XML. Musisz uciec z tego, zastępując go '&'. – BrenBarn

+0

Jakiś tekst i ta postać nie jest dobra, co mówisz? Również czytam w tych liniach z wielu różnych plików, więc nie jestem pewien, jak ja automatycznie mógłby je (czytaj z skryptu bash za pomocą grep a następnie wysyłane do pliku) – JDS

0

go rozwiązać za pomocą yattag zamiast

from yattag import indent 
print indent(xml_string.encode('utf-8')) 
Powiązane problemy