gpt4 book ai didi

xml - 如何在 VB.net 中根据 Schema 验证 XML

转载 作者:行者123 更新时间:2023-12-04 05:09:17 26 4
gpt4 key购买 nike

我正在尝试根据架构验证 xml。我正在使用 XmlReaderSetting 并尝试遵循 MSDN 上的示例,但无法使其工作。即使我针对架构抛出一个完全不同的文件,它也不会验证 xml。谁能解释我缺少什么?

谢谢,

    Protected Sub ValidateXML(xmlFilePath As String, schemasFilePath As String)

Try

Dim settings As XmlReaderSettings = New XmlReaderSettings()

settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", schemasFilePath)
settings.ValidationType = ValidationType.Schema

Dim reader As XmlReader = XmlReader.Create(xmlFilePath, settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)

Dim eventHandler As ValidationEventHandler = New ValidationEventHandler(AddressOf ValidationEventHandler)

' the following call to Validate succeeds.
document.Validate(eventHandler)
reader.Close()

Catch ex As Exception
Messagebox(ex.Message, "error")
End Try

End Sub

Protected Sub ValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)

Select Case e.Severity
Case XmlSeverityType.Error
'Messagebox(e, "error")
Case XmlSeverityType.Warning
'Messagebox(e, "error")
End Select

End Sub

最佳答案

您正在混合两种不同的方式来读取 XML 文件。您正在使用 XmlReader对象和一个 XmlDocument对象。通常,您只会使用其中一种。正如您所做的那样,两者都可以使用,但它确实会引入一些不必要的困惑。

验证不起作用的原因是因为您正在向阅读器添加模式验证,但随后附加了 ValidationEventHandler方法到 XmlDocument对象。两者 XmlDocumentXmlReader能够执行模式验证,并且他们每个人都有自己的 XmlSchemaSet和验证事件处理程序,它们用于执行验证。你已经给了他们每个人所需的一半,而不是他们需要的所有东西。换句话说,您已完成以下操作:

  • XmlReader 的架构:套装
  • XmlReader 的事件处理程序:未设置
  • XmlDocument 的架构:未设置
  • XmlDocument 的事件处理程序:套装

  • 因此,这两个对象都没有正确验证所需的所有信息。 XmlReader对象将执行验证,但您不会收到它发现的任何错误的通知,而 XmlDocument object 根本不会进行任何验证,但如果确实发现了任何验证错误,它会通知您。要修复它,您需要设置 XmlReader对象的验证事件处理程序,或者您需要设置 XmlDocument对象的模式。例如:
    Dim settings As XmlReaderSettings = New XmlReaderSettings()
    settings.Schemas.Add("http://www.w3.org/2001/XMLSchema", schemasFilePath)
    settings.ValidationType = ValidationType.Schema
    AddHandler settings.ValidationEventHandler, New ValidationEventHandler(AddressOf ValidationEventHandler)
    Dim reader As XmlReader = XmlReader.Create(xmlFilePath, settings)
    ' Read the document...

    关于xml - 如何在 VB.net 中根据 Schema 验证 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15088585/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com