.net 4.0 将PSVI GetSchemaInfo与XSD验证错误ValidationEventArgs.Message关联

.net 4.0 将PSVI GetSchemaInfo与XSD验证错误ValidationEventArgs.Message关联,.net-4.0,xml-validation,xsd-validation,.net 4.0,Xml Validation,Xsd Validation,我对Microsoft针对.Net framework 4.0的MSDN文档有一个问题 我想知道是否有一种方法可以从 Private Sub DumpInvalidNodes(ByVal el As XElement) If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then ... End If End Sub 我想知道第7行引用了第2行的错误消息 正如本文所示,我有一个运行XSD验证的XML文

我对Microsoft针对.Net framework 4.0的MSDN文档有一个问题

我想知道是否有一种方法可以从

Private Sub DumpInvalidNodes(ByVal el As XElement)
   If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then
     ...
   End If
End Sub
我想知道第7行引用了第2行的错误消息


正如本文所示,我有一个运行XSD验证的XML文档,我想将ValidationEventArgs.Message解析为一个更用户友好的消息,用于复杂的数据类型。我希望在DumpInvalidNodes方法中执行此操作,因为我可以访问无效节点,并可以从节点获取其他信息,如用户可以用来查找和修复验证问题的ID。

最简单的方法是修改原始代码,而不是在,在验证处理程序中执行该操作;它将同时向您提供验证消息和节点,只需将发送者强制转换为XObject,并根据需要进行处理


对于从文件或字符串加载的XML,您也可以使用这篇MSDN文章。对用户的其他提示(如行号和列位置)也可能有用。

我尝试访问诸如LineNumber之类的属性,但它们总是空的,但我认为我没有在验证处理程序中正确捕获XObject。这是一个时间,因为我审查了这个项目,所以我会审查它,看看这是否会给我一些更多的属性。谢谢行信息为空,除非您配置选项以获取它。您必须显式地执行此操作,默认情况下不存在。看看这个例子。
<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