Compartir a través de


Serializar en XmlReader (invocar XSLT)

Actualización: November 2007

Cuando use las capacidades de interoperabilidad System.Xml de LINQ to XML, puede utilizar CreateReader para crear un objeto XmlReader. El módulo que lee desde el objeto XmlReader lee los nodos desde el árbol XML y los procesa.

Invocar una transformación XSLT

Un uso posible para este método es la invocación de una transformación XSLT. Puede crear un árbol XML, crear un objeto XmlReader desde el árbol XML, crear un nuevo documento y crear un objeto XmlWriter que escribirá en el nuevo documento. A continuación, puede invocar la transformación XSLT, pasando XmlReader y XmlWriter. Después de que se complete correctamente la transformación, se rellenará el nuevo árbol XML con los resultados de la transformación.

string xslMarkup = @"<?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>";

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

XDocument newTree = new XDocument();
using (XmlWriter writer = newTree.CreateWriter()) {
    // Load the style sheet.
    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load(XmlReader.Create(new StringReader(xslMarkup)));

    // Execute the transformation and output the results to a writer.
    xslt.Transform(xmlTree.CreateReader(), writer);
}

Console.WriteLine(newTree);
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 XDocument = _
    <?xml version='1.0'?>
    <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 transformation and output the results to a writer.
    xslt.Transform(xmlTree.CreateReader(), writer)
End Using

Console.WriteLine(newTree)

Este ejemplo genera el siguiente resultado:

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

Vea también

Conceptos

Serializar árboles XML