Delen via


XSLT gebruiken om een XML-structuur (LINQ naar XML) te transformeren

U kunt XSLT gebruiken om een XML-structuur te transformeren, met behulp van XmlReader lezen en XmlWriter schrijven.

Voorbeeld: XSLT gebruiken om een XML-structuur te transformeren, met behulp van XMLReader lezen en XMLWriter schrijven

In dit voorbeeld wordt een XML-structuur gemaakt en wordt XSLT gebruikt om deze te transformeren. Het maakt gebruik van een XmlReader om de oorspronkelijke structuur te lezen en een XmlWriter om de getransformeerde versie te schrijven.

Het begint met het maken van:

  • Een XML-structuur.
  • Een XmlReader van de XML-structuur.
  • Een nieuw document voor de XSLT-uitvoer.
  • Een XmlWriter om de getransformeerde structuur naar het nieuwe document te schrijven.

Vervolgens wordt een XSLT-transformatie aangeroepen die gebruikmaakt van de XmlReader oorspronkelijke XML-structuur en de XmlWriter transformatiestructuur naar het nieuwe document schrijven.

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)

In dit voorbeeld wordt de volgende uitvoer gegenereerd:

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

Zie ook