Настройте синтаксический анализатор Xerces SAX для допуска ошибки синтаксиса XML - PullRequest
1 голос
/ 23 июля 2010

Я получаю эту ошибку при разборе неправильно сгенерированного XML-документа:

org.xml.sax.SAXParseException: The value of attribute "bar" associated with an element type "foo" must not contain the '<' character.

Я знаю, что является причиной проблемы.Вот эта строка:

<foo bar="x<y">42</foo>

Это должно было быть

<foo bar="x&lt;y">42</foo>

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

Есть ли способ настроить Xerces, чтобы допустить это?В настоящее время это воспринимается как фатальная ошибка.Реализация ErrorHandler для игнорирования не является удовлетворительной, потому что тогда остальная часть документа не будет проанализирована.

В качестве альтернативы, вы можете предложить другой потоковый парсер, который можно настроить, чтобы допустить эту ошибку?Использование парсера DOM неосуществимо, поскольку эти документы занимают сотни мегабайт.

Ответы [ 2 ]

5 голосов
/ 23 июля 2010

... и по политическим причинам может быть невозможно убедить поставщика исправить неисправную программу ...

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

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

4 голосов
/ 23 июля 2010

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

...