Re: XSLT mit VB.NET?

From: Marcus Warm (nospam_at_mwvb.de)
Date: 11/24/04


Date: Wed, 24 Nov 2004 21:38:21 +0100

Ich hab's jetzt hinbekommen. Hier der vollständige VB.NET 2003 Code.
Vielleicht hilft dies hier ja anderen weiter oder andere können den Code
noch optimieren. Eine Compiler-Warnung ist noch drin. Ob's für größere XML
Dokumente schnell funktioniert, habe ich noch nicht ausprobiert.

Gruß
Marcus
[VB.NET Newbie]

'--Anfang--

Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Imports System.Xml.Xsl

Module Module1

  'XSL Transformation
  'ob's der beste & schnellste Weg ist ... wer weiß ...
  Function transform(ByVal XML As String, ByVal XSL As String) As String
    Dim ret As New StringWriter
    Dim XSLT As New XslTransform
    Dim XSL1 As XmlTextReader
    Dim XML1 As XmlTextReader, XML2 As XPathDocument

    'aus kurzem XSL-Script ein langes machen
    XSL = "<?xml version=""1.0"" encoding=""windows-1252""?>" & _
      "<xsl:style*** version=""1.0""
xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">" & _
      XSL & "</xsl:style***>"
    'XSL in den Transformator laden
    XSL1 = New XmlTextReader(New StringReader(XSL))
    XSLT.Load(XSL1) '<- Compiler-Warnung: You should pass evidence to Load()
method
    'XML in ein XPathDocument umwandeln
    XML1 = New XmlTextReader(New StringReader(XML))
    XML2 = New XPathDocument(XML1)
    'Transformation durchführen
    XSLT.Transform(XML2, Nothing, New XmlTextWriter(ret), Nothing)
    'Ergebnis landet in ret
    Return ret.ToString
  End Function

  Sub Main()
    Dim XML1 As String, XML2 As String, XSL As String

    'Eingabe-XML
    XML1 = "<ROWSET ID=""1""><ROW N=""soll BUGSY Elementgruppe
ausgeben""/><ROW N=""Nr. 2""/></ROWSET>"

    'verkürztes XSL-Script
    XSL = "<xsl:template match=""ROWSET"">"
    XSL = XSL & "<xsl:element name=""BUGSY"">"
    XSL = XSL & "<xsl:for-each select=""ROW"">"
    XSL = XSL & "<xsl:copy-of select="".""/>"
    XSL = XSL & "</xsl:for-each>"
    XSL = XSL & "</xsl:element>"
    XSL = XSL & "</xsl:template>"

    'XSL-Transformation
    XML2 = transform(XML1, XSL)

    'Ausgaben
    Console.WriteLine(XML1)
    Console.WriteLine("")
    Console.WriteLine("Jetzt kommt das Transformationsergebnis:")
    Console.WriteLine("")
    Console.WriteLine(XML2)
    Console.ReadLine()
  End Sub

End Module

'--Ende--