Ответ не простой, но потерпите меня ...
Я работал с командой, которая внедрила полностью совместимый проверяющий синтаксический анализатор XML. Я спросил у них именно эту особенность. Они объяснили, что неправильное / неожиданное имя тега (одно и то же) может быть вызвано двумя ситуациями:
a) неверное имя тега в правильной позиции в xsd
b) правильное имя тега внеправильная позиция в xsd
Когда люди просят об этой функции, они почти всегда думают о сценарии а). XSD очень прост (очень ограниченная изменчивость в XML-документе), и для читателя «очевидно», что неожиданное имя тега является опечаткой. К сожалению, спецификация XSD допускает много типов изменчивости. Вы можете иметь xs: any (подстановочные знаки), группы выбора, неупорядоченные группы, необязательные элементы, расширения сложного типа с различными типами ограничений и т. Д. Если XSD очень «открыт», то вовсе не очевидно, что неожиданное имя тега былопростая опечатка. Попытка продолжения будет бессмысленной в общем случае , потому что анализатор XML не будет знать, откуда продолжить анализ.
Существует только одна ситуация, когда процессор XML может выдать ошибку проверкии безопасно продолжить анализ при любых обстоятельствах . Если простое значение тега / атрибута не соответствует ограничениям xsd: facet, можно сообщить об ошибке и продолжить. Синтаксический анализатор не потерял свой «контекст» в XSD, поскольку все имена элементов были успешно сопоставлены.
Вы можете испытать искушение сослаться на свой пример и сказать «но в моем случае парсинг может быть безопасным». Продолжить'. Вы были бы правы, но я не знаю ни одного парсера XML, который смог бы различить ситуации «безопасно продолжить» и «небезопасно продолжить» для несопоставленных имен тегов.