Vorgehensweise: Füllen eines XML-Baums mit einem XmlWriter (LINQ to XML) (C#)

Eine Möglichkeit zum Füllen eines XML-Baums besteht darin, CreateWriter zu verwendet, um einen XmlWriter zu erstellen, und dann in den XmlWriter zu schreiben. Die XML-Struktur wird mit allen Knoten aufgefüllt, die in den XmlWriter geschrieben werden.

Üblicherweise verwenden Sie diese Methode, wenn Sie LINQ to XML zusammen mit einer anderen Klasse verwenden, die erwartet, in einen XmlWriter zu schreiben, wie etwa XslCompiledTransform.

Beispiel

Das Aufrufen einer XSL-Transformation ist ein möglicher Einsatz von CreateWriter. In diesem Beispiel werden eine XML-Struktur, ein XmlReader aus der XML-Struktur, ein neues Dokument und dann ein XmlWriter zum Schreiben in das neue Dokument erstellt. Anschließend wird die XSLT-Transformation aufgerufen, wobei XmlReader und XmlWriter übergeben werden. Nach erfolgreichem Abschluss der Transformation wird die neue XML-Struktur mit den Ergebnissen der Transformation aufgefüllt.

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);  

Dieses Beispiel erzeugt die folgende Ausgabe:

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

Siehe auch

CreateWriter
XmlWriter
XslCompiledTransform
Erstellen von XML-Bäumen (C#)