2011-11-14 13 views
7

Czytam plik XML przy użyciu Pythona. Ale mój plik xml zawiera & znaków, z powodu których podczas pracy mojego kodu Pythona, daje następujący błąd:Python podaje błąd "Nie jest dobrze sformatowany xml" z powodu obecności znaków "&"

xml.parsers.expat.ExpatError: not well-formed (invalid token): 

Czy istnieje sposób, aby ignorować czek & przez pytona?

+1

możliwe duplikat [Jak mogę uciec ampersandy w XML?] (Http://stackoverflow.com/questions/1328538/how-do-i-escape-ampersands -in-xml) –

+0

@James: niezupełnie, ponieważ chodzi o to, jak parsować coś, co jest prawie, ale nie całkiem XML, a nie jak poprawnie utworzyć XML w pierwszej kolejności. – geoffspear

+3

Czy masz kontrolę nad tym, co obrzydnie tworzy oryginalny plik "XML", abyś mógł sprawić, że faktycznie uzyskasz prawidłowy kod XML? – geoffspear

Odpowiedz

6

Nie, nie można zignorować czeku. Twój "plik xml" nie jest plikiem XML - aby być plikiem XML, znak ampersand musiałby zostać zmieniony. W związku z tym żadne oprogramowanie przeznaczone do odczytu plików XML nie analizuje go bezbłędnie. Musisz poprawić oprogramowanie, które wygenerowało ten plik, aby wygenerowało właściwy ("dobrze sformułowany") kod XML. Wszystkie korzyści wynikające z używania XML do wymiany znikają całkowicie, jeśli ludzie zaczną wysyłać rzeczy, które nie są dobrze sformułowane, a osoby, które je otrzymają, próbują je załatać.

+3

To po prostu nie jest w porządku. 1) Jest dużo soft'ów, które parsują taki plik - działa jakakolwiek przeglądarka internetowa, a także IDE takie jak Xcode. 2) Nie możesz poprosić ludzi o naprawienie soft, który generuje XML tylko dlatego, że w ogóle jest on miękki. – LiMar

+0

Mogą istnieć produkty programowe, które mogą analizować takie pliki, ale takie oprogramowanie nie jest analizatorem składni XML. Zgodne parsery XML są wymagane do zgłaszania wszystkich błędów w plikach XML. Przeglądarki internetowe, o ile jestem w stanie ustanowić, poprawnie odrzucają plik obsługiwany jako XML, jeśli zawiera znak ampesand bez zmiany znaczenia. –

+2

A kiedy oprogramowanie generuje zły kod XML, poprawianie go jest właściwym rozwiązaniem. Generowanie złego XML jest tym samym, co generowanie własnego formatu własnego wynalazku - nie ma sensu przyjmowanie standardu, a następnie jego niewłaściwe wdrażanie. –

2

Dla mnie dodanie linii "<?xml version='1.0' encoding='iso-8859-1'?>" na początku napisu sprawiło, że była to sztuczka.

>>> text = '''<?xml version="1.0" encoding="iso-8859-1"?> 
    ... <seuss><fish>red</fish><fish>blu\xe9</fish></seuss>''' 
>>> doc = elementtree.ElementTree.fromstring(text) 

sprawdź tę stronę https://mail.python.org/pipermail/tutor/2006-November/050757.html

Powiązane problemy