如何在XML文件中获取XSD错误的文件位置?

时间:2010-11-24 21:08:20

标签: .net xml xsd

我有以下代码可以根据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循环中做一些事情来了解问题所在,但我还没有找到它。

1 个答案:

答案 0 :(得分:1)

首先,不要使用“ex.Message”。它只显示顶级异常的文本。请改用ex.ToString()。

其次,查看异常时XmlReader的属性。另外,请仔细查看您传递的XmlException的所有属性。它具有LineNumberLinePosition属性。