Freigeben über


Verwenden von XSLT zum Transformieren einer XML-Struktur (LINQ to XML)

Sie können XSLT verwenden, um eine XML-Struktur zu transformieren, indem Sie XmlReader zum Lesen und XmlWriter zum Schreiben verwenden.

Beispiel: Verwenden Sie XSLT, um eine XML-Struktur zu transformieren, indem Sie XMLReader zum Lesen und XMLWriter zum Schreiben verwenden.

In diesem Beispiel wird eine XML-Struktur erstellt und XSLT verwendet, um sie zu transformieren. Das Beispiel nutzt einen XmlReader, um die ursprüngliche Struktur zu lesen, und einen XmlWriter, um die transformierte Version zu schreiben.

Zunächst werden die folgenden Elemente erstellt:

  • Eine XML-Struktur
  • Ein XmlReader der XML-Struktur
  • Ein neues Dokument, das die XSLT-Ausgabe enthält
  • Ein XmlWriter, um die transformierte Struktur in das neue Dokument zu schreiben

Anschließend wird eine XSLT-Transformation aufgerufen, die XmlReader verwendet, um die ursprüngliche XML-Struktur zu lesen, und XmlWriter, um die transformierte Struktur in das neue Dokument zu schreiben.

string xslt = @"<?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
        <xsl:template match='/Parent'>
            <Root>
                <C1>
                <xsl:value-of select='Child1'/>
                </C1>
                <C2>
                <xsl:value-of select='Child2'/>
                </C2>
            </Root>
        </xsl:template>
    </xsl:stylesheet>";

var oldDocument = new XDocument(
    new XElement("Parent",
        new XElement("Child1", "Child1 data"),
        new XElement("Child2", "Child2 data")
    )
);

var newDocument = new XDocument();

using (var stringReader = new StringReader(xslt))
{
    using (XmlReader xsltReader = XmlReader.Create(stringReader))
    {
        var transformer = new XslCompiledTransform();
        transformer.Load(xsltReader);
        using (XmlReader oldDocumentReader = oldDocument.CreateReader())
        {
            using (XmlWriter newDocumentWriter = newDocument.CreateWriter())
            {
                transformer.Transform(oldDocumentReader, newDocumentWriter);
            }
        }
    }
}

string result = newDocument.ToString();
Console.WriteLine(result);
Dim xslMarkup As XDocument = _
    <?xml version='1.0'?>
    <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
        <xsl:template match='/Parent'>
            <Root>
                <C1>
                    <xsl:value-of select='Child1'/>
                </C1>
                <C2>
                    <xsl:value-of select='Child2'/>
                </C2>
            </Root>
        </xsl:template>
    </xsl:stylesheet>

Dim xmlTree As XElement = _
    <Parent>
        <Child1>Child1 data</Child1>
        <Child2>Child2 data</Child2>
    </Parent>

Dim newTree As XDocument = New XDocument()

Using writer As XmlWriter = newTree.CreateWriter()
    ' Load the style sheet.
    Dim xslt As XslCompiledTransform = _
        New XslCompiledTransform()
    xslt.Load(xslMarkup.CreateReader())

    ' Execute the transform and output the results to a writer.
    xslt.Transform(xmlTree.CreateReader(), writer)
End Using

Console.WriteLine(newTree)

Dieses Beispiel erzeugt die folgende Ausgabe:

<Root>
  <C1>Child1 data</C1>
  <C2>Child2 data</C2>
</Root>

Siehe auch