Python выдает ошибку «Неправильно сформированный xml» из-за наличия символов «&»

Я читаю XML-файл с помощью Python. Но мой xml-файл содержит & символов, из-за чего при запуске моего кода Python он выдает следующую ошибку:

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

Есть ли способ игнорировать & проверку с помощью python?


person SyncMaster    schedule 14.11.2011    source источник
comment
возможный дубликат Как избежать амперсандов в XML?   -  person James Black    schedule 14.11.2011
comment
@ Джеймс: не совсем так, поскольку вопрос в том, как разбирать что-то, что почти, но не совсем XML, а не в том, как правильно создать XML в первую очередь.   -  person Wooble    schedule 14.11.2011
comment
У вас есть контроль над тем, что мерзость создает исходный файл XML, чтобы вы могли заставить его действительно выдавать вам действительный XML?   -  person Wooble    schedule 14.11.2011
comment
Тогда XML-файл на самом деле неправильно сформирован, и любой соответствующий XML-синтаксический анализатор не должен его анализировать. Разве вы не можете исправить исходный код для создания настоящего XML?   -  person svick    schedule 14.11.2011
comment
К сожалению, это не правильно сформированный XML-файл. Это текстовый файл с тегами. Поэтому я подумал, что доступ к нему в виде файла xml будет проще для обработки данных.   -  person SyncMaster    schedule 14.11.2011
comment
@pragadheesh - Так что просто замените все амперсанды тремя заменами амперсанда, как в вопросе, который я упомянул, а затем сделайте это как XML.   -  person James Black    schedule 14.11.2011


Ответы (2)


Нет, вы не можете игнорировать чек. Ваш «xml-файл» не является XML-файлом - чтобы быть XML-файлом, амперсанд должен быть экранирован. Следовательно, никакое программное обеспечение, предназначенное для чтения файлов XML, не сможет проанализировать их без ошибок. Вам необходимо исправить программное обеспечение, создавшее этот файл, чтобы он генерировал правильный («правильно сформированный») XML. Все преимущества использования XML для обмена полностью исчезнут, если люди начнут присылать некорректные материалы, а люди, получающие их, попытаются исправить это.

person Michael Kay    schedule 14.11.2011
comment
Это просто неправильно. 1) Существует множество программ, которые анализируют такой файл - это делает любой интернет-браузер, а также IDE, такие как Xcode. 2) Вы не можете просить людей исправить программное обеспечение, которое производит XML, только потому, что в общем случае это стороннее программное обеспечение. - person LiMar; 24.06.2013
comment
Могут существовать программные продукты, которые могут анализировать такие файлы, но такой программный продукт не является анализатором XML. Соответствующие синтаксические анализаторы XML должны сообщать обо всех ошибках в файлах XML. Интернет-браузеры, насколько я могу установить, правильно отклоняют файл, обслуживаемый как XML, если он содержит неэкранированный амперсанд. - person Michael Kay; 24.06.2013
comment
И когда программное обеспечение генерирует плохой XML, исправление этого является правильным решением. Создание плохого XML - это то же самое, что создание собственного формата собственного изобретения - нет смысла принимать стандарт, а затем не реализовывать его должным образом. - person Michael Kay; 24.06.2013

Для меня добавление строки «<?xml version='1.0' encoding='iso-8859-1'?>» перед строкой помогло.

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

Перейдите на эту страницу https://mail.python.org/pipermail/tutor/2006-November/050757.html

person Kumar    schedule 24.10.2014