2008-08-28 2 views
1

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

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

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

Update:

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

ответ

1

In fact, IIRC, that's actually part of the 'official' spec for parsers.

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

fatal error

[Definition:] An error which a conforming XML processor must detect and report to the application. After encountering a fatal error, the processor may continue processing the data to search for further errors and may report such errors to the application. In order to support correction of errors, the processor may make unprocessed data from the document (with intermingled character data and markup) available to the application. Once a fatal error is detected, however, the processor must not continue normal processing (i.e., it must not continue to pass character data and information about the document's logical structure to the application in the normal way).

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

1

Похоже, вы, возможно, захотите TagSoup. Это может быть не совсем то, что вы хотите, но, поскольку анализаторы обработки плохой документации - это золотой стандарт.

1

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

http://apache.org/xml/features/continue-after-fatal-error
True: Attempt to continue parsing after a fatal error.
False: Stops parse on first fatal error.
Default: false
Note: The behavior of the parser when this feature is set to true is undetermined! Therefore use this feature with extreme caution because the parser may get stuck in an infinite loop or worse.

Смежные вопросы