Как получить позицию файла ошибки XSD в файле XML? - PullRequest
0 голосов
/ 25 ноября 2010

У меня есть следующий код, который успешно проверяет файл XML по схеме XSD:

    Try

        Dim val As New Xml.XmlReaderSettings With {.ValidationType = ValidationType.Schema}
        val.Schemas.Add(Nothing, "myvalidator.xsd")

        Using reader = XmlReader.Create("myfile.xml", val)
            While reader.Read
            End While
        End Using

        Console.WriteLine("XML validation succeeded.")

    Catch ex As Exception
        Console.WriteLine("XML validation failed." & vbCr & vbLf & "Error Message: " & ex.Message)
    End Try

Пример ошибки, которую я получаю:

The element 'address' has invalid child element 'zip_code'. List of possible elements expected: 'address_line_2, address_line_3, city'.

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

1 Ответ

1 голос
/ 25 ноября 2010

Прежде всего, не используйте «ex.Message». Он показывает только текст исключения верхнего уровня. Используйте взамен ex.ToString ().

Во-вторых, посмотрите на свойства XmlReader во время исключения. Также внимательно посмотрите на все свойства XmlException, которые вы передаете. Имеет свойства LineNumber и LinePosition.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...