C'est une raison assez typique d'utiliser XSLT, qui est un outil efficace et puissant pour transformer un document XML en un autre (ou en HTML ou texte).
Voici un programme minimal pour effectuer une transformation XSLT et envoyer les résultats à la console:
using System;
using System.Xml;
using System.Xml.Xsl;
namespace XsltTest
{
class Program
{
static void Main(string[] args)
{
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("test.xslt");
XmlWriter xw = XmlWriter.Create(Console.Out);
xslt.Transform("input.xml", xw);
xw.Flush();
xw.Close();
Console.ReadKey();
}
}
}
Voici le XSLT réelle, qui est enregistré dans test.xslt
dans le répertoire du programme. C'est assez simple: étant donné un document d'entrée dont l'élément de niveau supérieur est input
, il crée un élément output
et est copié sur chaque élément enfant dont l'attribut value
est défini sur true
.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/input">
<output>
<xsl:apply-templates select="*[@value='true']"/>
</output>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Et voici input.xml
:
<?xml version="1.0" encoding="utf-8" ?>
<input>
<element value="true">
<p>This will get copied to the output.</p>
<p>Note that the use of the identity transform means that all of this content
gets copied to the output simply because templates were applied to the
<em>element</em> element.
</p>
</element>
<element value="false">
<p>This, on the other hand, won't get copied to the output.</p>
</element>
</input>
En fin de c'est la réponse que je suis allé avec. –