IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Comment réussir une transformation XSL ?


Sujet :

C#

  1. #1
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut [C#] Comment réussir une transformation XSL ?
    Bonjour à tous,

    J'ai eu beau chercher dans la FAQ et les forums, je n'ai pas trouvé ma réponse.

    Je suis sous Visual Studio .NET 2003, et je dois faire une transformation XSL en C#.

    Jusqu'il y a 2 mois, la partie d'édition de statistiques gérée par cette transformation XSL/XML fonctionnait correctement. Puis, le nombre d'enregistrement en base a augmenté, et une erreur est apparut lors de la génération, une "Null reference exception ....." causé par la fonction Transform() d'un objet XslTransform.

    Il se trouve que cette fonction est désaprouvée, et je me demandais s'il n'y avait pas une autre façon de générer un état HTML.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    try
    {
      //Création du flux XML, ds étant un DataSet construit au préalable
      XmlDataDocument docxml = new XmlDataDocument(ds);	
     
      // Fichier XML source
      string fichierXML =String.Format( Path.GetDirectoryName(fichier) + "/"+  this.nom + ".xml" );			 
     
      docxml.Save(fichierXML);
     
      //Chargement du modéle XSLT
      XslTransform xslt = new XslTransform();			
      xslt.Load(MonfichierXsl);
     
      //Chemin du fichier temporaire html utilisé pour la transformation
      string fichierHTML =String.Format( Path.GetDirectoryName(fichier) + "/"+  this.nom + ".html" );			 
     
      XmlTextWriter writer = new XmlTextWriter(fichierHTML, null);			
      //Transformation
      xslt.Transform(docxml,null,writer);
     
      writer.Close();
     
      //Récupération du flux HTML
     
      StreamReader stream = new StreamReader (fichierHTML );
      rephtml = stream.ReadToEnd();
      stream.Close();
    }
    catch(Exception ex)
    {
      rephtml=ex.Message;
      erreur=ex;	
    }
    return rephtml;
    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut Re: [C#] Comment réussir une transformation XSL ?
    Mmmh bizarre si effectivement celà fonctionnait en l'état avant.

    Pour test, as-tu essayer d'utiliser un XPathDocument à la place de ton XmlDataDocument ? pour voir si l'exception persiste avec la montée en charge des données.
    Je ne suis pas un spécialiste, serait-ce un souci avec la taille du cache ?
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    Oui j'ai aussi essayer avec un XPathDocument, et c'est pareil

    Mes investigations ne sont pas terminées..


    J'ai continué à chercher...

    J'ai d'abbord tenter le coup avec toutes les possibiltés de paramêtres pour la fonction Transform() sans succés.

    Et j'ai testé avec un outils nommé "Cooktop", qui permet d'ouvrir un fichier XML, un XSL, et de générer le tout en HTML suivant un moteur XSL choisit.

    Alors... Résultat certainement intéressant, mais ne me faisant pas avancé beaucoup.

    J'ai d'abbord lancé la génération par défaut, aucune erreur, mon fichier HTML fut bien créé.
    Ensuite, j'ail modifier le moteur XSL, qui était par défaut a "MSXML", et je l'ait mis sur ".NET".
    Résultat : Fichier HTML généré a 95%, pas d'erreur visible, mais en affichant le "Trace indow" (qui recense les évenements de l'outils), j'ai pus voir : "La r‚f‚rence d'objet n'est pas d‚finie … une instance d'un objet."

    Ce qui ressemble fortement à mon erreur sous Dotnet..

    Bref, je ne sais pas trop quoi tirer comme conclusion, a part que c'a m'a l'air un peu trop pointu pour moi

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    si c'est toujours 95 % du html qui arrive à être généré, il serait interressant de verifier si c'est toujours la même partie qui passe et donc de verifier à quelles données correspondent la suite, sont elles mal formées et font échouer l'execution ? C'est peut-être qu'une seule donnée mal fichue qui fait échouer l'ensemble :
    Désolé mais c'est peut être pas encore un problème pointu mais bien un travail de débuggage ingrat qui t'attend

    Edit : au pif ce ne serait un souci de version MSXML
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    J'ai regardé ou cela plantait, et dans la feuille XSL, cela ne correspond a rien de bien méchant, en tous cas rien qui ne pourrait faire bugger le processus, car c'est simplement des balises html et du text, pas de fonction Xpath, ou autre appel de procédure XSL...

    Par contre, je me suis demandé s'il n'était pas possible de changer le moteur XSL utilisé dans Dotnet. J'ai vu qu'il y avait une classe XslContext, alors je regarde s'il n'y pas un moyen de configurer un objet de ce type correctement, de manière à résoudre mon problème.
    Enfin... ce n'est qu'un supposition, je ne sais meme pas si cette classe permet de faire ce que je veux...

    J'ai vu que sous le .NET 2.0 il y avait une classe XslCompiledTransform pour gérer ce cas, qui n'est pas dans le 1.1 (ma version actuelle), cela arrangerait t'il la chose ? Je ne voudrait pas faire une migration complète pour rien...

    J'ai installé le framework 2.0, mais je ne sais pas comment faire pour "dire" à DotNet d'utiliser ce dernier pour mon application, afin que je puisse utiliser la fameuse classe XslCompiledTransformed pour tester...

    Quelqu'un aurait une idée ?

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Pour les IDE Visual Studio, seuls les versions 2005 sont en mesure d'utiliser 2.0
    Donc ou tu télécharges une version Express (encore gratuite) ou tu passes à SharpDevelop si t'e pas trop riche
    Sinon acquiert une version Pro de VS2005
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre régulier Avatar de ashurai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 144
    Points : 115
    Points
    115
    Par défaut
    d'accord, Merci pour ces indications

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/05/2011, 00h40
  2. Inclure la dtd de SMIL ou SVG pour une transformation xsl
    Par 0coco0 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/12/2008, 20h49
  3. [XSLT] CDATA par défaut lors d'une transformation xsl
    Par thierry_b dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 16/12/2008, 13h57
  4. [XSLT] Comment inclure une balise xsl dans une balise html
    Par sylsau dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/10/2006, 09h33
  5. Encodage lors d'une transformation xsl par le browser
    Par ouioui2000 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/04/2006, 12h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo