Procédure : remplir une arborescence XML avec un XmlWriter (LINQ to XML)
L'une des manières de remplir une arborescence XML consiste à utiliser CreateWriter pour créer un objet XmlWriter, puis à écrire dans l'objet XmlWriter. L'arborescence XML est remplie avec tous les nœuds écrits dans l'objet XmlWriter.
On utilise généralement cette méthode lors de l'utilisation de LINQ to XML avec une autre classe qui s'attend à écrire dans un objet XmlWriter, tel que XslCompiledTransform.
Exemple
Une utilisation possible de CreateWriter est lors de l'appel à une transformation XSLT. Cet exemple crée une arborescence XML, crée un objet XmlReader à partir de l'arborescence XML, crée un nouveau document, puis crée un objet XmlWriter pour écrire dans le nouveau document. Il appelle ensuite la transformation XSLT, en passant XmlReader et XmlWriter. Une fois la transformation terminée avec succès, la nouvelle arborescence XML est remplie avec les résultats de la transformation.
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)
Cet exemple génère la sortie suivante :
<Root>
<C1>Child1 data</C1>
<C2>Child2 data</C2>
</Root>