【问题标题】:Adding To an XMLSchemaSet from a Pack URI从 Pack URI 添加到 XMLSchemaSet
【发布时间】:2017-04-21 17:45:47
【问题描述】:

我正在尝试从包 URI 添加到 XMLSchemaSet,但出现以下错误:

抛出异常:System.dll 中的“System.NotSupportedException”

附加信息:无法识别 URI 前缀。

代码如下:

Dim XML = XDocument.Parse("<Product></Product>")
Dim Schemas As New XmlSchemaSet()
Schemas.Add("", "pack://application:,,,/MyAssemblyName;component/Resources/XSD Resources/Product.xsd")
XML.Validate(Schemas, Sub(sender As Object, e As ValidationEventArgs) Console.WriteLine(e.Message))

我从本地路径加载没有任何问题,但是这些 XSD 需要与应用程序一起打包。我在这里的包 URI 做错了什么?

【问题讨论】:

    标签: .net xml vb.net uri


    【解决方案1】:

    您可以指定一个自定义XmlResolver 并提供一个知道如何加载“pack:”URI 的实现:

    Dim XML = XDocument.Parse("<Product></Product>")
    Dim Schemas As New XmlSchemaSet()
    Schemas.XmlResolver = New CustomResolver()
    Schemas.Add("", "pack://application:,,,/MyAssemblyName;component/Resources/XSD Resources/Product.xsd")
    XML.Validate(Schemas, Sub(sender As Object, e As ValidationEventArgs) Console.WriteLine(e.Message))
    ' ...
    Class CustomResolver
        Inherits XmlUrlResolver
    
        Public Overrides Function GetEntity(absoluteUri As Uri, role As String, ofObjectToReturn As Type) As Object
            If absoluteUri.Scheme = "pack" Then
                Return Application.GetResourceStream(absoluteUri).Stream
            End If
            Return MyBase.GetEntity(absoluteUri, role, ofObjectToReturn)
        End Function
    
    End Class
    

    这只是最低限度的测试,因此您可能需要添加一些错误处理等。

    【讨论】:

      猜你喜欢
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多