![]() |
Mis à jour le 08/03/2006
Version PDF à télécharger Code Source
Droit de diffusion:
Avant Propos :
Sommaire:1. Le UserControl2. Ma feuille de style 3. Le résultat 4. Conclusion 5. Pour aller plus loin 1. Le UserControlRien de plus simple, un champ de saisir, un bouton, un lien qui donnera l’url du flux rss et un placeholder pour ajouter ma transformation XSLT. Le plus intéressant, le code derrière le bouton : protected void Button1_Click( object sender, EventArgs e) { // Lance la recherche if (txt_search.Text.Length > 0) { // J'encode ma chaine de recherche string v_search = Server.UrlEncode(txt_search.Text); // Je complete ma requete http string v_url = "http://search.live.com/live/query.aspx?q=" + v_search + "&source=web&count=20&first=1" ;
//
En français ou
if (cb_fr.Checked) v_url += "&mkt=fr-FR&v=3" ; else v_url += "&mkt=en-US&v=3" ; // Le chemin de ma feuille de style string v_xsl = "http://localhost/livesearch/transform.xsl" ; // Mon controle HTML HtmlGenericControl v_out = new HtmlGenericControl (); // Je mets dans mon controle le résultat de la transformation v_out.InnerHtml = Transformation(v_url, v_xsl); // J'initialise une image (rss) Image img = new Image (); img.BorderStyle = BorderStyle .None; img.ImageUrl = "/livesearch/rss.gif" ; // Je l'ajoute comme lien HyperLink1.Controls.Add(img); // Je mets l'url du flux rss de résultat de recherche comme //lien HyperLink1.NavigateUrl = v_url; HyperLink1.Target = "_blank" ; // J'ajoute mon controle dans le placeHolder ph_result.Controls.Add(v_out); // Requete supplémentaire permettant l'avoir un complément de // recheche grace au spelling //http://search.live.com/live/query.aspx?q=MARECHERCHE&source=spelling&mkt=en-US&v=3 } } Enfin la transformation du flux XML via ma feuille de style dans la méthode Transformation. /// <summary> /// Transforme les données /// </summary> /// <param name="p_xml"> Fichier XML </param> /// <param n ame="p_xsl"> Fichier XSL </param> /// <returns> String </returns> private string Transformation( string p_xml, string p_xsl) { // Charge le fichier XML XmlDocument v_xml = new XmlDocument (); v_xml.Load(p_xml); // Charge le fichier XSL XmlDocument v_xsl = new XmlDocument (); v_xsl.Load(p_xsl); // On créé un lecteur du fichier XML XmlNodeReader v_xmlReader = new XmlNodeReader (v_xml);
// Puis le transformateur XSL XslCompiledTransform v_xslt = new XslCompiledTransform (); v_xslt.Load(v_xsl, null , null ); // Chaine utilisée pour le retour StringBuilder v_output = new StringBuilder (); // Construit la methode d'écriture du flux HTML XmlWriterSettings v_settings = new XmlWriterSettings (); v_settings.ConformanceLevel = ConformanceLevel .Auto; v_settings.Indent = true ;
// Fait la transformation XmlWriter v_html = XmlWriter .Create(v_output, v_settings); v_xslt.Transform(v_xmlReader, null , v_html, new XmlUrlResolver ()); Notez la bidouille : Le flux XML retourne des caractères non reconnus autour des mots clés. En fouillant dans le javascript (search.js), j’ai trouvé qu’il s’agit des balises <b> et </b>. N’étant pas un pro de l’encodage et de la manipulation de chaines, ma méthode est quelque peu barbare et mérite d’être améliorée. // Le fichier issu de MSN Live Search comporte des caractères // non reconnus pour le <b> et le </b> // Parcours la chaine et transforme les données // /uE000 et /uE001 sont les équivalents des balises bold // Trouvé dans le fichier search.js du moteur de recherche !!! string cout = v_output.ToString();
int vpb = cout.IndexOf( "\uE000" ); while (vpb >= 0) { cout = cout.Substring(0, vpb) + "<b>" + cout.Substring(vpb + 1, cout.Length - (vpb + 1)); vpb = cout.IndexOf( "\uE000" ); } vpb = cout.IndexOf( "\uE001" ); while (vpb >= 0) { cout = cout.Substring(0, vpb) + "</b>" + cout.Substring(vpb + 1, cout.Length - (vpb + 1)); vpb = cout.IndexOf( "\uE001" ); } // Retourne la valeur return cout; } 2. Ma feuille de styleRien de très complexe, a part : < xsl:stylesheet version = " 1.0 " xmlns:xsl = " http://www.w3.org/1999/XSL/Transform " xmlns:opensearch = " http://a9.com/-/spec/opensearchresponse/1.1/ " xmlns:atom = " http://www.w3.org/2005/Atom " xmlns:livesearch = " http://www.live.com/search/2005/livesearch " > Nécessaire pour attaquer correctement vos nœuds. 3. Le résultat
4. ConclusionJe suis plutôt agréablement surpris par la démarche de Microsoft qui ouvre son API d’une manière très simple. Reste à gérer les pages suivantes, gérables dans l’argument de l’url. Bonne découverte à tous Laurent GEFFROY http://www.laurentgeffroy.com 5. Pour aller plus loinLe moteur de recherche : http://search.live.com Fiddler : http://www.fiddlertool.com/fiddler/ Transformation XSL / XML avec le framework 2.0 : http://www.csharpfr.com/codes/TRANSFORMATION-XSLT-NET_33721.aspx |
| Accueil - Tutoriels & Articles - Liens - A Propos de l'auteur | ![]() |