[C#] -Résolu- XmlTransform est deprecated... Ok mais...

-Résolu- XmlTransform est deprecated... Ok mais... [C#] - C#/.NET managed - Programmation

Marsh Posté le 04-07-2006 à 20:41:17    

J'ai un programme.
Il génère un flux XML.
J'ai une feuille XSL.
Je veux récupérer, sous forme d'un TextWriter, le résultat de la transformation de mon flux XML.
 
Comment je fais ?
Là franchement, je cherche à droite à gauche, à chaque fois je trouve des exemple qui partent de fichiers sur le disque, et les écrivent sur le disque...
http://msdn2.microsoft.com/fr-fr/library/66f54faw.aspx
 
Moi je veux bien que XslCompiledTransform soit plus rapide, mais si c'est pour passer obligatoirement par le disque, je ne vois pas trop là où je gagne...
 
En gros, ce truc me va bien, sauf que mon "books.xml" est un XmlDocument.
Je veux bien passer par un XPathDocument, mais il est readonly.
Et bosser dans un XmlDocument, faire un save dans un ms, puis recharger le ms dans un XPathDocument, faire la transformation, et enfin envoyer à mon TextWriter, je trouve ça plus que moyen... Surtout si le document Xml en question est volumineux !
 

Code :
  1. // Execute the transformation.
  2. XslCompiledTransform xslt = new XslCompiledTransform();
  3. xslt.Load("output.xsl" );
  4. MemoryStream ms = new MemoryStream();
  5. xslt.Transform(new XPathDocument("books.xml" ), null, ms);
  6. // Load the results into an XPathDocument object.
  7. ms.Seek(0, SeekOrigin.Begin);
  8. XPathDocument doc = new XPathDocument(ms);


 
Une idée ?
 
Actuellement, j'ai ça :
 

Code :
  1. protected override void Render(System.Web.UI.HtmlTextWriter writer)
  2.     {
  3.         Response.Clear();
  4.         Response.ContentEncoding = System.Text.Encoding.UTF8;
  5.         Response.ContentType = "text/html";
  6.         XmlDocument xmlPage = new XmlDocument();
  7.         xmlPage.Load(MapPath(string.Format("Pages/{0}.xml", this.page)));
  8.         XmlDocument resPage = RenderPage(xmlPage);
  9.         XslTransform xslPage = new XslTransform();
  10.         xslPage.Load(MapPath(string.Format("Pages/xsl/{0}.xsl", xmlPage.SelectSingleNode("page/template" ).Attributes["name"].Value)));
  11.         xslPage.Transform(resPage.CreateNavigator(), null, Response.Output);
  12.         if (Request.QueryString["debug"] != null)
  13.         {
  14.             resPage.Save(MapPath("/debug.xml" ));
  15.         }
  16.         resPage = null;
  17.         xslPage = null;
  18.         xmlPage = null;
  19.     }


 
Note de fin de post : c'est résolu (Arjuna, ou comment se prendre la tête deux heures pour rien)
 
En fait :
 

Code :
  1. XslCompiledTransform xslPage = new XslCompiledTransform(true);
  2.         xslPage.Load(MapPath(string.Format("Pages/xsl/{0}.xsl", xmlPage.SelectSingleNode("page/template" ).Attributes["name"].Value)));
  3.         xslPage.Transform(resPage.CreateNavigator(), null, Response.Output);


 
C'est la même syntaxe, y'a pas un caractère de différent :o
 
Faut dire qu'ils sont cons, XPathNavigator et XPathNavigable c'est la même chose :o (du moins, le cast est implicite entre les deux)
Et moi qui trouvais pas comment faire un Navigable à partir du Navigator :o

Reply

Marsh Posté le 04-07-2006 à 20:41:17   

Reply

Marsh Posté le 04-07-2006 à 23:41:14    

Bon, ben chuis content, j'ai fait une refonte complète de mon truc pendant le match (ça m'intéresse tellement...)
Maintenant c'est plus clair, plus rapide, et en plus je sais faire plein de trucs que je pouvais pas faire avant :bounce:
 
(ouais, je sais, ça intéresse personne, et en plus vous savez pas de quoi je parle mais c'est pas grave :spamafote:)


Message édité par Arjuna le 04-07-2006 à 23:41:40
Reply

Marsh Posté le 05-07-2006 à 18:51:48    

et si ca intéresse qqlun! moi!
Pourrais-tu me dire comment tu as fait? ca me soule aussi de voire un deprecated à chaque compilation...

Reply

Marsh Posté le 05-07-2006 à 19:19:11    

Ben la syntaxe ci-dessus justement, y'a l'exemple "avant" et "après" ;)

Reply

Marsh Posté le 06-07-2006 à 18:49:44    

Oups je n'avais pas remarqué. Toutes mes excuses et merci pour le code.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed