Согласно спецификации XML допускается только первое представление. Я бы сказал, что другие представления должны привести к ошибке.
Вы можете добавить некоторую предварительную обработку для очистки недопустимых конструкций (удалить пробелы), а затем прочитать данные как XML.
Этот препроцессор очистит ваши данные до того, как они попадут в ваш XML-анализатор - это может быть другая программа. Таким образом, ваш синтаксический анализатор XML получит только действительный XML (за исключением особых случаев для анализа), если входные данные верны на полпути. Если ваш синтаксический анализатор все еще сталкивается с ошибкой, вы можете предположить, что входные данные вообще не были XML-ишем.
Так, например, во время предварительной обработки данные будут изменены, окончательно проанализированы как XML:
Удалить фиктивные пробелы (один препроцессор) → Угадайте закрывающие теги (другой препроцессор) → Разобрать как XML
На вопрос о разрешенных конструкциях отвечает ваше заявление, чтобы принять как можно больше. Поскольку в этом случае вы удалили бы все пробелы после <
, если следует ?
, снова удалите все пробелы до следующего слова - затем проанализируйте как XML.
Лично я не думаю, что принимать большинство конструкций желательно. Если ваши данные содержат ошибки, они должны обрабатываться как таковые.