2017-04-21 26 views
0

我試圖從包URI添加到XmlSchemaSet中,我發現了以下錯誤的XmlSchemaSet中:添加要從包URI

拋出異常:的「System.NotSupportedException」在System.dll中

附加信息:無法識別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?

回答

0

您可以指定一個自定義XmlResolver,並提供一個知道如何加載「包」的實現的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 

這只是最低限度的測試,所以你可能需要添加一些錯誤處理,等等。

+0

完美運作。謝謝! – Sooshie