Свяжите PSVI GetSchemaInfo с ошибкой проверки XSD ValidationEventArgs.Message - PullRequest
1 голос
/ 19 сентября 2011

У меня есть вопрос о документации Microsoft MSDN для Extenstions.GetSchemaInfo Method (XElement) для .Net framework 4.0.

Я хочу знать, есть ли способ изнутри

Private Sub DumpInvalidNodes(ByVal el As XElement)
   If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then
     ...
   End If
End Sub

Код для получения ValidationEventArgs.Message для недопустимого узла.Этот пример прекрасно работает, когда у вас есть пронумерованные узлы XML, как в примере: GrandChild1, GrandChild2.Вы можете сказать, какой неправильный узел создает ошибки проверки по сайту.Но когда у вас есть XML без нумерованных узлов, например,

<Root>
    <Child>
        <GrandChild>AAA</GrandChild>
        <GrandChild>ZZZ</GrandChild>
        <GrandChild>ZZZ</GrandChild>
    </Child>
</Root>

, вы получите вывод, который выглядит следующим образом:

(1)Validating doc1 ... 
(2)The 'GrandChild' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed. 
(3)The 'GrandChild' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed. 
(4)doc1 did not validate 
(5)Invalid Element /Root 
(6)Invalid Element /Root/Child 
(7)Invalid Element /Root/Child/GrandChild 
(8)Invalid Element /Root/Child/GrandChild 

Я хотел, чтобы строка (7) ссылалась наErrorMessage в строке (2).

У меня есть XML-документ, по которому я выполняю проверку XSD, как показано в этой статье, и я хотел проанализировать ValidationEventArgs.Message в более удобное для пользователя сообщение для сложных типов данных.Я хотел бы сделать это в методе DumpInvalidNodes (), потому что у меня есть доступ к недопустимому узлу и я могу получить от узла другую информацию (например, идентификатор), которую пользователь может использовать для поиска и исправления проблемы проверки.

1 Ответ

0 голосов
/ 16 октября 2011

Самый простой способ для вас - изменить исходный код и вместо выполнения дампа узла делать это в обработчике проверки; он выдаст вам сообщение проверки и узел одновременно (просто приведите отправителя к объекту XObject и обработайте его, как вам нужно).

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

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