【问题标题】:Validating XML with multiple XSD using relative paths in .NET使用 .NET 中的相对路径验证具有多个 XSD 的 XML
【发布时间】:2009-10-20 00:53:33
【问题描述】:

我正在尝试编写一个通用 VB.NET (VS2005) 函数来针对 XSD 验证 XML 文档。这工作正常,直到我使用具有相对路径的 XSD 包括:

<xs:include schemaLocation="test.02.xsd" />

它似乎永远无法找到任何辅助文档中包含的内容。这是我下面的原始功能。我一直在玩 XmlUrlResolver() 但我似乎也无法使用它取得任何进展。在这里的任何帮助将不胜感激。

Private Sub ValidatingProcess(ByVal XSDPath As String, ByVal XMLPath As String)
    Try
        Me.Reader = New XmlTextReader(XMLPath)
        Dim SR As New StreamReader(XSDPath)
        Dim Schema As New XmlSchema()
        Schema = XmlSchema.Read(SR, New ValidationEventHandler(AddressOf ReaderSettings_ValidationEventHandler))
        Dim ReaderSettings As New XmlReaderSettings()
        ReaderSettings.ValidationType = ValidationType.Schema
        ReaderSettings.Schemas.Add(Schema)
        AddHandler ReaderSettings.ValidationEventHandler, AddressOf ReaderSettings_ValidationEventHandler
        Dim objXmlReader As XmlReader = XmlReader.Create(Reader, ReaderSettings)
        While objXmlReader.Read()
        End While
    Catch AccessEx As UnauthorizedAccessException
        Throw AccessEx
    Catch Ex As Exception
        Throw Ex
    End Try
End Sub

【问题讨论】:

    标签: .net xml xsd relative-path


    【解决方案1】:

    我通过创建这样的自定义 XmlUrlResolver 解决了这个问题:

    Class CustomResolver
        Inherits XmlUrlResolver
    
        Private _CustomBaseUri As Uri
    
        Public Sub New(ByVal baseUri As Uri)
            If baseUri.IsFile Then
                _CustomBaseUri = New Uri(Path.GetDirectoryName(baseUri.LocalPath.ToString()) & "\")
            Else
            End If
            Me._CustomBaseUri = baseUri
        End Sub
    
        Public Overloads Overrides Function ResolveUri(ByVal baseUri As Uri, ByVal relativeUri As String) As Uri
            If baseUri IsNot Nothing Then
                Return MyBase.ResolveUri(baseUri, relativeUri)
            Else
                Return MyBase.ResolveUri(_CustomBaseUri, relativeUri)
            End If
        End Function
    End Class
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2011-10-23
      • 2012-09-20
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 2011-02-19
      相关资源
      最近更新 更多