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 |
Partager