我有以下代码可以根据XSD架构成功验证XML文件:
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
循环中做一些事情来了解问题所在,但我还没有找到它。
答案 0 :(得分:1)
首先,不要使用“ex.Message”。它只显示顶级异常的文本。请改用ex.ToString()。
其次,查看异常时XmlReader的属性。另外,请仔细查看您传递的XmlException
的所有属性。它具有LineNumber
和LinePosition
属性。