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.

De XML à Word (WordML) via XSLT

Bonjour,

Aujourd’hui, petit post sur l’utilisation de XSLT pour créer un document Word à l’aide d’un fichier XML

Procédure:

1. Créez ou ouvrez sous word le fichier type, celui que vous voudriez générer. Puis sauvegardez le au format .xml (2003)

2. Ouvrez le avec un éditeur de text (comme notepad++ par exemple)

Constatez qu’il est assez long (et brouillon!)

Il consiste en ces 3 lignes :

<?xml version=1.0″ encoding=”UTF-8″ standalone=”yes”?>
 
<?mso-application progid=”Word.Document?>

Suivi d’une balise:

<w:wordDocument xmlns:aml=”ht….> (ici se trouve toutes les données du document) </w:wordDocument>

3. Modifiez la structure pour avoir au final:

<?xml version=1.0″ encoding=”Windows-1252?>
 
<xsl:stylesheet version=2.0″
 
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”
 
xmlns:msxsl=”urn:schemas-microsoft-com:xslt”
 
extension-element-prefixes=”msxsl”
 
xmlns:aml=”http://schemas.microsoft.com/aml/2001/core”
 
xmlns:dt=”uuid:C2F41010-65B3-11d1-A29F-00AA00C14882″
 
xmlns:ve=”http://schemas.openxmlformats.org/markup-compatibility/2006″
 
xmlns:o=”urn:schemas-microsoft-com:office:office”
 
xmlns:v=”urn:schemas-microsoft-com:vml”
 
xmlns:w10=”urn:schemas-microsoft-com:office:word”
 
xmlns:w=”http://schemas.microsoft.com/office/word/2003/wordml”
 
xmlns:wx=”http://schemas.microsoft.com/office/word/2003/auxHint”
 
xmlns:wsp=”http://schemas.microsoft.com/office/word/2003/wordml/sp2″
 
xmlns:sl=”http://schemas.microsoft.com/schemaLibrary/2003/core”
 
w:macrosPresent=”no” w:embeddedObjPresent=”no” w:ocxPresent=”no” xml:space=”preserve”>
 
<xsl:output method=”xml” indent=”no” version=1.0″
 
encoding=”Windows-1252″ standalone=”yes”/>
 
<w:ignoreSubtree w:val=”http://schemas.microsoft.com/office/word/2003/wordml/sp2″/>
 
<xsl:template match=/>
 
<xsl:processing-instruction name=”mso-application”>
 
<xsl:text>progid=”Word.Document</xsl:text>
 
</xsl:processing-instruction>
 
<w:wordDocument>
 
<o:DocumentProperties>
 
<!– gardez tout ce qui se trouve à l’interieur de Document Properties, de meme pour les blocs suivants:>
 
</o:DocumentProperties>
 
<w:fonts>
 
</w:fonts>
 
<w:styles>
 
</w:styles>
 
<w:divs>
 
</w:divs>
 
<w:shapeDefaults>
 
</w:shapeDefaults>
 
<w:docPr>
 
</w:docPr>
 
<w:body> <!– ici se trouve le “vrai contenu”
 
</w:body>
 
</w:wordDocument>
 
</xsl:template>
 
</xsl:stylesheet>

Renommez en .xslt

Voila, vous avez désormais une feuille xslt qui doit vous donner l’exacte réplique de votre page word. Elle n’a rien de dynamique pour le moment mais vous avez la base! Le reste n’est qu’utilisation normale du « langage » xsl!

Pour ajouter un saut de page, la commande est :

<w:br w:type=”page”/>

Bonne chance

Projet « Cryptographie et sécurité des réseaux » II : Signature numérique (DSA)

Le second projet du cours « Cryptographie et sécurité des réseaux », suivi a l’Université de Stavanger, Norvège était un cran plus complexe que le premier, particulierement durant la génération des clés: nous devons manipuler des nombres extremement grands. J’ai développé l’application en Java et utilisé la classe BigInteger pour gérer ces nombres énormes.

Le programme fonctionne comme cela:

1. D’abord vous devez générer votre clé publique et votre clé privée, puis sauvegarder la clé publique (le programme vous permet de la sauvegarder dans un fichier .pk)

TO FINISH

2. Then, type your message and sign it, then save it in a file ( .mes extension)

3. The last step (the most important) is the part where you check if the message loaded really comes from the official writter. So you have to load his public key, load the message and then press check.

Here is a screenshot of the application:

For information, I have implemented the digital signature algorithm with a 1024 bits long p and a 160 bits long q (for people who knows what the DSA algorithm is all about)

I use a hash function made by myself. You can find everything in the code at the end of this post.

And you can download the whole project (code + exec + report) here :  > Download <