Procedura: popolare una struttura ad albero XML con XmlWriter (LINQ to XML)

Per popolare una struttura ad albero XML, è possibile utilizzare CreateWriter per creare XmlWritere quindi scrivere in XmlWriter. La struttura ad albero XML viene popolata con tutti i nodi scritti in XmlWriter.

Questo metodo viene in genere adottato quando si utilizza LINQ to XML con un'altra classe che prevede di scrivere in XmlWriter, ad esempio XslCompiledTransform.

Esempio

Un possibile utilizzo di CreateWriter è il richiamo di una trasformazione XSLT. In questo esempio viene creata una struttura ad albero XML da cui viene creato un oggetto XmlReader. Viene quindi creato un nuovo documento e infine viene creato un oggetto XmlWriter per scrivere nel nuovo documento. Viene quindi richiamata la trasformazione XSLT, passando XmlReader e XmlWriter. Dopo il completamento della trasformazione, la nuova struttura ad albero XML viene popolata con i relativi risultati.

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)

L'output ottenuto eseguendo l'esempio è il seguente:

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

Vedere anche

Riferimenti

CreateWriter

XmlWriter

XslCompiledTransform

Concetti

Creazione di strutture ad albero XML