【问题标题】:How to get the file position of an XSD error in the XML file?如何获取 XML 文件中 XSD 错误的文件位置?
【发布时间】:2010-11-24 21:08:20
【问题描述】:

我有以下代码可以成功地根据 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 循环中做一些事情来知道问题出在哪里,但我还没有找到它。

【问题讨论】:

    标签: .net xml xsd


    【解决方案1】:

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

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

    【讨论】:

    • 完美。我忘记捕获特定的错误类型,所以我只查看通用异常处理程序的属性,而不是特定的 XmlSchemaValidationException 处理程序,所以我没有看到 LineNumber 和 LinePosition 等额外属性,这正是我需要。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 2010-12-27
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多