XSLT : Fonction pour appliquer un XSL à votre XML via le XslCompiledTransform
Une fonction qui peut s'avérer pratique lorsqu'on souhaite charger un document XML, lui appliquer un XSL pour générer un nouveau XML ou plus souvent un fichier (X)HTML.
Dans cette fonction il suffit d'indiquer le chemin complet pour chacun des 2 fichiers.
Pratique par exemple pour générer dynamiquement des fichiers depuis un XML et XSL sur d'autres serveurs.
Les namespaces à utiliser se limitent à :
- System.Xml
- System.Xml.Xsl
Pour plus d'information sur XslCompiledTransform et XmlWriterSettings :
/// <summary>
/// Allows to apply a XSL transformation
/// </summary>
/// <param name="xmlDoc">XML document path</param>
/// <param name="xslDoc">XSL document path</param>
/// <returns></returns>
private XmlDocument ApplyXSLTransformation(String xmlDocPath, String xslDocPath)
{
XmlDocument outputXmlDoc = new XmlDocument();
try
{
// Loads the XML document
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlDoc);
XmlNodeReader reader = new XmlNodeReader(xmlDoc);
// Settings to apply for the transformation
XsltSettings settings = new XsltSettings();
settings.EnableDocumentFunction = true;
// Object to apply XSL
XslCompiledTransform xslt = new XslCompiledTransform(true);
xslt.Load(xslDocPath, settings, null);
// Used to get generated XML/HTML according to the wished output format
StringBuilder transformOutput = new StringBuilder();
// XML writer + settings to write the stream results
XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.ConformanceLevel = ConformanceLevel.Auto;
XmlWriter htmlDoc = System.Xml.XmlWriter.Create(transformOutput, xslt.OutputSettings);
// Applies transformation
xslt.Transform(reader, null, htmlDoc, new XmlUrlResolver());
// Loads the resulting stream in the XML document outputXmlDoc.InnerXml = transformOutput.ToString();
}
catch (XmlException ex) { // To define }
catch (ArgumentNullException ex) {//To define }
catch (XsltException ex) { // To define }
return outputXmlDoc;
}
Si vous avez des remarques/critiques, n'hésitez pas !
Vincent
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :