Partager via


Utiliser XSLT pour transformer une arborescence XML (LINQ to XML)

Vous pouvez utiliser XSLT pour transformer une arborescence XML avec XmlReader pour la lecture et XmlWriter pour l’écriture.

Exemple : Utiliser XSLT pour transformer une arborescence XML avec XMLReader pour la lecture et XMLWriter pour l’écriture

Cet exemple crée une arborescence XML et utilise XSLT pour la transformer. Il utilise un XmlReader pour lire l’arborescence d’origine et un XmlWriter pour écrire la version transformée.

Il commence par créer :

  • Une arborescence XML.
  • XmlReader de l’arborescence XML.
  • Nouveau document pour contenir la sortie XSLT.
  • XmlWriter pour écrire l’arborescence transformée dans le nouveau document.

Il appelle ensuite une transformation XSLT qui utilise XmlReader pour lire l’arborescence XML d’origine, ainsi XmlWriter pour l’écriture de l’arborescence transformée dans le nouveau document.

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)

Cet exemple produit la sortie suivante :

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

Voir aussi