1

我对 Microsoft 的.Net 框架 4.0的Extenstions.GetSchemaInfo 方法 (XElement)的 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),用户可以使用这些信息来查找和修复验证问题。

4

1 回答 1

0

对您来说最简单的方法是修改原始代码,而不是在之后进行节点转储,而是在验证处理程序中进行;它会同时为您提供验证消息和节点(只需将发送者转换为 XObject 并根据需要进行处理)。

对于从文件或字符串加载的 XML,您还可以在此处使用此 MSDN 文章。对用户的其他提示,例如行号和列位置,也可能很有用。

于 2011-10-16T04:43:02.863 回答