Bonjour,
Je reçois des fichiers XSLT (auquel je ne peux pas toucher) pour transformer des fichiers XML
Les fichiers XSLT sont en ressource de l'application et les fichiers XML à transformer sont sur le PC de l'utilisateur.

Jusqu'à là, pas de soucis

Mais voila que je reçois des fichiers XSLT avec une référence à un fichier XML à l'intérieur!
Ces 2 fichiers devront être en resource.
Comment puis-je faire pour charger le XSLT en resource (ça pas de problème) et aussi "substituer" la référence au document XML à un document XML en ressource?

Dans le fichier XSLT, voici la référence au fichier XML:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<xsl:param name="ExternalDoc2" select="'C:\Users\jmd_000\Desktop\ExternalDoc.xml'"/>
...et en effet, tant que l'on reste avec le fichier présent en local tout fonctionne bien.

Ce que j'essaie donc, je vous le rappelle, c'est de pouvoir substituer ce fichier local à un fichier en resource (tout comme l'est déjà le fichier XLST)

D'avance un tout grand merci pour votre aide!

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Imports System.IO
Imports System.Reflection
Imports System.Xml
Imports System.Xml.XPath
Imports System.Xml.Xsl
 
Class MainWindow
    Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
        ToUpdate()
    End Sub
    Sub ToUpdate()
        TransformXML("..\..\..\OldData.xml", "MappingMapToNewData.xslt", "..\..\..\NewData.xml")
    End Sub
    Public Shared Sub TransformXML(sXmlPath As String, sXslPath As String, outPath As String)
        Try
            ' loading XML 
            Dim myXPathDoc As New XPathDocument(sXmlPath)
            Dim myXslTrans As New XslCompiledTransform()
 
            ' loading XSLT from embedded resource
            Using strm As Stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("WpfApplication1." & sXslPath)
                Using reader As XmlReader = XmlReader.Create(strm)
                    Dim resolver = New MyXmlUrlResolver()
                    myXslTrans.Load(reader, XsltSettings.TrustedXslt, resolver)
                End Using
            End Using
 
            ' creating Output Stream 
            Dim myWriter As New XmlTextWriter(outPath, Nothing)
            myWriter.Formatting = Formatting.Indented
 
            ' XML transformation 
            myXslTrans.Transform(myXPathDoc, Nothing, myWriter)
            myWriter.Close()
        Catch e As Exception
            '
        End Try
    End Sub
 
    Private Class MyXmlUrlResolver
        Inherits XmlUrlResolver
        Public Overrides Function GetEntity(absoluteUri As Uri, role As String, ofObjectToReturn As Type) As Object
            Select Case absoluteUri.Scheme
                Case "file"
                    Dim origString As String = absoluteUri.OriginalString
                    Dim assembly__1 As Assembly = Assembly.GetExecutingAssembly()
                    Dim resourceName As String = "WpfApplication1.ExternalDoc.xml"
 
                    Dim stream = assembly__1.GetManifestResourceStream(resourceName)
                    Return stream
                Case Else
                    Return DirectCast(MyBase.GetEntity(absoluteUri, role, ofObjectToReturn), Stream)
            End Select
        End Function
    End Class
End Class
Voici un lien vers la solution pour vous faciliter la vie
http://www100.zippyshare.com/v/lP7dNE2z/file.html