我对.Net框架4.0的Extenstions.GetSchemaInfo Method (XElement)的Microsoft MSDN文档有疑问。
我想知道
中是否有办法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)行引用第(2)行中的ErrorMessage。
我有一个XML文档,我正在运行XSD验证,正如本文所示,我想将ValidationEventArgs.Message解析为更复杂数据类型的用户友好消息。我想在DumpInvalidNodes()方法中执行此操作,因为我可以访问无效的节点,并且可以从节点获取其他信息(如ID),用户可以使用该信息查找并修复验证问题。
答案 0 :(得分:0)
最简单的方法是修改原始代码而不是之后进行节点转储,在验证处理程序中执行;它会同时为您提供验证消息和节点(只需将发送者强制转换为XObject并根据需要处理它)。
对于从文件或字符串加载的XML,您也可以使用此MSDN文章here。对用户的其他提示(例如行号和列位置)也可能有用。