2016-12-09 4 views
1

я получаюElementTree.ParseError: ссылка на недействительный символьный номер

ElementTree.ParseError: reference to invalid character number

при разборе XML, который содержит следующее в качестве значения тега: locat

Мой код выглядит как:

respXML = httpResponse.content 
#also possible respXML = httpResponse.content.decode("utf-8") 
#but both get the same error 

#this line throws the error 
respRoot = ET.fromstring(respXML) 

Как я могу разблокировать свой парсер против, казалось бы, недопустимых номеров символов?

+0

'' представляет собой символ управления НАЧАЛЬНИК ЗАГОЛОВОК. Если парсер XML встречает этот символ, он должен выдать ошибку. Символ запрещен в XML 1.0 (https://www.w3.org/TR/xml/#charsets). – mzjn

ответ

0

Это выглядит как html. Посмотрите, следует ли использовать html-пакет во входной строке перед чем-либо еще. https://pypi.python.org/pypi/html

>>> import html 
>>> test = "locat" 
>>> html.unescape(test) 
'local' 

Затем конвертировать некоторые известные символы Юникода в их эквиваленты. i.e

“ => " 
’ => ' 
... 

Наконец, замените двойные пробелы на одно место.

Так как это будет довольно громоздким, чтобы все успешно решить, я рекомендую размещать определенные исключения и записывать неверную строку в файл. По одному адресуйте каждую ошибку в выходном файле, добавив больше правил.

Удачи.