Compartir a través de


Procedimiento para rellenar un árbol XML con un objeto XmlWriter (LINQ to XML)

Una forma de rellenar un árbol XML consiste en utilizar CreateWriter para crear XmlWriter y después escribir en XmlWriter. El árbol XML se rellena con todos los nodos que se escriben en XmlWriter.

Normalmente se usa este método cuando se usa LINQ to XML con otra clase que espera escribir en un XmlWriter, como XslCompiledTransform.

Ejemplo: Creación de un objeto XmlWriter para aceptar la salida de una transformación XSLT

Puede usar CreateWriter para crear un XmlWriter para aceptar la salida de una transformación XSLT. Esto se muestra en el ejemplo siguiente, que se ejecuta en los EE. UU:

  • Crea un árbol XML y un objeto XmlReader para leerlo.
  • Crea un nuevo árbol y un objeto XmlWriter que se va a escribir en él.
  • Invoca la transformación XSLT, proporcionándola con XmlReader y XmlWriter.

A continuación, la transformación rellena el nuevo árbol.

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 produce el siguiente resultado:

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

Consulte también