Вопрос

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

Редактировать:Я говорю о допустимых XML-документах - просто недопустимых для конкретной схемы!

Это было полезно?

Решение

Вы можете выполнить это, вроде как, настроив XmlReader, чьи XmlReaderSettings содержат схему, а затем использовать его для чтения входного потока узел за узлом.Вы можете отслеживать последнее чтение узла и иметь довольно хорошее представление о том, где вы находитесь в документе, когда происходит ошибка проверки.

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

Другие советы

По моему опыту, вам повезло получить номер строки и позицию синтаксического анализа.

Вы могли бы рассмотреть возможность проверки с помощью DTD, который может иногда приведите немного более интересные ошибки, однако в проекте, над которым я сейчас работаю, мы проверяем с помощью XSLTS.Преобразование проверяет синтаксис и сообщает об ошибках в виде выведенного текста преобразования.Я бы рассмотрел этот маршрут, если вы хотите более удобную проверку ошибок.Для нас пустой вывод означает отсутствие ошибок, в противном случае мы получаем некоторые приятные подробности из обработки XSLT о том, что было ошибкой и где.

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

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

Похоже, это непростая задача.Ответ Роберта Россни ближе всего подходит к программному решению моей проблемы, поэтому я пока соглашусь с этим.Я продолжу использовать решение xsl.Любой, кто найдет лучший способ устранения ошибок проверки, может ответить на этот поток.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top