2015-12-18 4 views
0

Я хочу проанализировать XML-файл с помощью Python. Мне не нужна иерархическая структура тегов - все, что я хочу, это простой синтаксический анализатор SAX или Expat. Тем не менее, они оба терпят неудачу с mismatched tag связанными сообщениями об ошибке, когда XML-файл плохо сформирован.Как игнорировать несогласованные теги при разборе xml в Python

Есть ли способ сказать анализатору игнорировать эти ошибки? Я попытался установить

parser.setFeature(sax.handler.feature_validation, False) 

, но это тоже не помогло.

Есть ли решение? Будет SAX/Expat.

+0

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

ответ

0

Попробуйте ввести Beautiful Soup. Его основная цель - проанализировать HTML даже при наличии пороков развития. Вы можете обнаружить, что он анализирует ваш недопустимый XML без особых проблем.

+0

Насколько я помню, он не предлагает последовательный (SAX-подобный) интерфейс? –

+0

@DavidNemeskey: Я не знаю, поможет ли это в вашем конкретном случае, но проверьте SoupStrainer: http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#Fun%20With%20SoupStrainers –

0

Вы бы также использовали lxml? Он имеет функцию, называемую iterparse, которая управляется событиями в (согласно документации) «SAX-like fashion» и имеет параметр для принудительного разбора разбитого ввода. Это довольно легко использовать, также.

lxml iterparse tutorial

lxml iterparse class definition