Отчет о проверке парсера XML - PullRequest
1 голос
/ 28 августа 2008

Большинство анализаторов XML сдаются после первой ошибки в документе. Фактически, IIRC, это фактически часть «официальной» спецификации для парсеров.

Я ищу что-то, что нарушит это правило. Он должен принимать заданную схему (при условии действительной схемы) и ввод XML и пытаться продолжать идти после первой ошибки и либо вызывать событие для каждой ошибки, либо возвращать список по окончании, чтобы я мог использовать его для генерации некоторого вида отчет об ошибках в документе. Это требование вытекает из вышесказанного, поэтому давайте постараемся сохранить пуристический ", но не имеет смысла продолжать" комментарии до минимума

Я ищу что-то, что оценило бы, правильно ли сформирован документ и , соответствует ли оно схеме. В идеале это оценило бы их как различные классы ошибок. Я бы предпочел решение .Net, но я мог бы также использовать автономный .exe. Если вам известна платформа, использующая другую платформу, опубликуйте ее, потому что кто-то другой может найти ее полезной.

Обновление:

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

Ответы [ 3 ]

1 голос
/ 28 августа 2008

Звучит так, как вы, возможно, захотите TagSoup . Возможно, это не совсем то, что вам нужно, но для парсеров с плохой обработкой документов это золотой стандарт.

1 голос
/ 29 августа 2008

Xerces имеет функцию , которую можно установить, чтобы попытаться продолжить после фатальной ошибки:

http://apache.org/xml/features/continue-after-fatal-error
True: попытка продолжить разбор после фатальной ошибки.
False: останавливает анализ при первой фатальной ошибке.
По умолчанию: false
Примечание: поведение парсера, когда эта функция установлена Истина не определена! Поэтому используйте эта функция с особой осторожностью потому что парсер может застрять в бесконечный цикл или хуже.

1 голос
/ 28 августа 2008

На самом деле, IIRC, это фактически часть «официальной» спецификации для парсеров.

Официально не нужно указывать:)

фатальная ошибка

[Определение:] Ошибка, которую соответствующий XML-процессор должен обнаружить и сообщить приложению. После обнаружения фатальной ошибки процессор может продолжить обработку данных для поиска дальнейших ошибок и может сообщить о таких ошибках приложению. Для поддержки исправления ошибок процессор может сделать доступными для приложения необработанные данные из документа (со смешанными символьными данными и разметкой). Однако после обнаружения фатальной ошибки процессор не должен продолжать нормальную обработку (т.е. он не должен продолжать передавать символьные данные и информацию о логической структуре документа в приложение обычным способом).

Вы можете использовать xmllint с опцией восстановления.

...