Utiliser XSLT en C# (avec XML)

Bonjour,

Ci dessous le processus pour utiliser le combo xslt xml en C#

1. Créer la classe de l’objet que vous voulez serialiser en XML.

Exemple :

[XmlRoot(ElementName = "CSuiviDetail")]
 
public class CBordereauDetail
 
{
 
[XmlElement("Array1_elems")]
 
public Array1_elem[] Array1_elems;
 
public CBordereauDetail(int Array1_elemsNumber)
 
{
 
Array1_elems = new Array1_elem[Array1_elemsNumber];
 
}
 
public CBordereauDetail()
 
{
 
}
 
}
 
[XmlRoot(ElementName = "Array1_elem")]
 
public class Array1_elem
 
{
 
[XmlAttribute("semaine")]
 
public int semaine;
 
[XmlAttribute("codeIngenieur")]
 
public string codeIngenieur;
 
[XmlElement("fonctionnalite")]
 
public string fonctionnalite;
 
[XmlAttribute("charge")]
 
public double charge;
 
[XmlElement("detail")]
 
public string detail;
 
}

2.  Créer le fichier XML:

using System.Xml;
 
using System.Xml.Serialization;
 
using System.IO;
 
//Création et initialisation de l'élément "BordereauDetail"
 
//..
TextWriter writer = new StreamWriter(xmlFilename);
XmlSerializer serializer = new XmlSerializer(typeof(CBordereauDetail));
serializer.Serialize(writer, BordereauDetail);
writer.Close();

3. Executer la règle XSLT et sauver le fichier

Attention au format, en effet si vous générez le fichier avec un StreamWriter, il se peut qu’il se produise un conflit qui pose problème (fichier généré avec l’entête utf-16 mais toujours sous la forme utf-8)

Préférez le code suivant si vous rencontrez des problèmes:

Byte[] buffer = XMLXSLfunct.ApplyXSLRule(xmlFilename, xslFilename);
 
using (System.IO.Stream s = System.IO.File.Create(outputFilename))                {
 
s.Write(buffer, 0, buffer.Length);
 
}
 
//fichier XMLXSLfunct:
 
using System.IO;
 
using System.Xml;
 
using System.Xml.Linq;
 
using System.Xml.Xsl;
 
using System.Xml.XPath;
 
using Mvp.Xml.Common.Xsl;
 
public static byte[] ApplyXSLRule(string reportXmlFilename, string xslFilename)
 
{
 
 /* ----------------- TRANSFORMATION XSL ---------------- */
 
XslCompiledTransform xslt = new XslCompiledTransform();
 
try
 
{
 
xslt.Load(xslFilename);
 
}
 
catch (Exception ex)
 
{
 
int error = 0;
 
}
 
System.Xml.XPath.XPathDocument fluxXml = new System.Xml.XPath.XPathDocument (reportXmlFilename);
 
MemoryStream ms = new MemoryStream();
 
xslt.Transform(fluxXml, null, ms);
 
Byte[] buffer = new Byte[ms.Length];
 
buffer = ms.ToArray();
 
ms.Close();
 
return buffer;
 
}

Voilà, vous avez votre fichier de sortie outputFilename, généré à partir de votre classe en C#, et parsé par un XSLT de votre choix.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *