Vorgehensweise: Auffüllen einer XML-Struktur mit einem XmlWriter (LINQ to XML)
Eine Möglichkeit, eine XML-Struktur aufzufüllen, besteht darin, mit CreateWriter 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.
Diese Methode kommt in der Regel zum Einsatz, wenn Sie LINQ to XML mit einer anderen Klasse verwenden, die davon ausgeht, dass sie in einen XmlWriter, z. B. XslCompiledTransform, schreibt.
Beispiel
CreateWriter kann beispielsweise verwendet werden, wenn eine XSLT-Transformation aufgerufen wird.In diesem Beispiel wird zunächst eine XML-Struktur erstellt, aus der dann ein XmlReader erstellt wird. Anschließend wird ein neues Dokument angelegt und dann für das Schreiben in das neue Dokument ein XmlWriter erstellt.Nachfolgend wird die XSLT-Transformation aufgerufen, wobei XmlReader und XmlWriter verwendet 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);
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)
Mit diesem Beispiel wird die folgende Ausgabe erzeugt:
<Root>
<C1>Child1 data</C1>
<C2>Child2 data</C2>
</Root>