首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从包URI向XMLSchemaSet添加

从包URI向XMLSchemaSet添加
EN

Stack Overflow用户
提问于 2017-04-21 17:45:47
回答 1查看 97关注 0票数 0

我正在尝试从pack中添加到一个XMLSchemaSet中,并得到以下错误:

引发的异常:“System.NotSupportedException”在System.dll中

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

下面是代码:

代码语言:javascript
复制
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没有任何问题,但是这些XSD需要与应用程序一起打包。我这里的包URI怎么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-21 19:24:45

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

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43549015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档