Настройте синтаксический анализатор Xerces SAX для допуска ошибки синтаксиса XML
Я получаю эту ошибку при разборе неправильно сгенерированного 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<y">42</foo>
Я знаю, что это недопустимый XML, но мой код должен загружать и анализировать подобные файлы без присмотра, и по политическим причинам может быть невозможно убедить поставщика исправить неисправную программу, особенно когда другие программы читают файл и допускают эта ошибка.
Есть ли способ настроить Xerces, чтобы терпеть это? В настоящее время это воспринимается как фатальная ошибка. Реализация ErrorHandler
игнорировать это неудовлетворительно, потому что тогда остальная часть документа не анализируется.
В качестве альтернативы, вы можете предложить другой потоковый парсер, который можно настроить для разрешения этой ошибки? Использование парсера DOM неосуществимо, поскольку эти документы занимают сотни мегабайт.
2 ответа
Я не думаю, что вы найдете парсеры XML, которые будут терпеть такого рода ошибки. Единственное, что я могу предложить, - это предварительно обработать XML-файл, чтобы удалить возможные ошибки.
... и по политическим причинам, возможно, не удастся убедить поставщика исправить неисправную программу...
По политическим причинам вы должны стараться изо всех сил, чтобы заставить их это исправить. Поместите перед ними спецификацию требований, в которой говорится, что входные данные должны быть правильно сформированы в формате XML. Угрожают выставить им счет за стоимость разработки специального парсера. (ОК, это, вероятно, не будет работать...)
Отказавшись без боя, вы просто оставляете проблему беспокоить других людей, которым придется иметь дело с этим поставщиком в будущем.