<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Robusta : Java &#38; RESTful Web Services &#187; XML</title>
	<atom:link href="https://blog.developpez.com/java_rest/pcategory/xml/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/java_rest</link>
	<description></description>
	<lastBuildDate>Fri, 24 Dec 2010 11:23:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>A la base, je n&#8217;ai rien contre Internet Explorer</title>
		<link>https://blog.developpez.com/java_rest/p5675/xml/web_a_la_base_je_n_ai_rien_contre_intern</link>
		<comments>https://blog.developpez.com/java_rest/p5675/xml/web_a_la_base_je_n_ai_rien_contre_intern#comments</comments>
		<pubDate>Mon, 12 May 2008 14:35:21 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[JsUnit]]></category>
		<category><![CDATA[Prototype]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Mais les images parlent d&#8217;elles-mêmes : Après cette accroche quelque peu racoleuse, je m&#8217;explique : JsUnit est un outil permettant de tester ses fonctions écrit en JavaScript. C&#8217;est tout simplement l&#8217;équivalent Javascript de JUnit. J&#8217;ai programmé mes tests au fur et à mesure en utilisant Firefox, puis à la fin de la semaine, je me suis rappelé l&#8217;existence d&#8217;Internet Explorer. Au vu des résultats, je me suis dit que la compatibilité présumée de Prototype envers [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Mais les images parlent d&rsquo;elles-mêmes :</p>
<table width="100%" border="0">
<tr>
<td><img src="http://nicolas-zozol.ftp-developpez.com/blog/junit-ff-ie/Avec%20FF.png" alt="Avec FF" title="Avec Firefox" /></td>
<td><img src="http://nicolas-zozol.ftp-developpez.com/blog/junit-ff-ie/AvecIE.png" alt="Avec IE" title="Avec IE" /></td>
</tr>
</table>
<p>Après cette accroche quelque peu racoleuse, je m&rsquo;explique :<br />
<a href="http://www.jsunit.net/">JsUnit </a>est un outil permettant de tester ses fonctions écrit en JavaScript. C&rsquo;est tout simplement l&rsquo;équivalent Javascript de JUnit. J&rsquo;ai programmé mes tests au fur et à mesure en utilisant Firefox, puis à la fin de la semaine, je me suis rappelé l&rsquo;existence d&rsquo;Internet Explorer. Au vu des résultats, je me suis dit que la compatibilité présumée de Prototype envers FF et IE allait prendre du plomb dans l&rsquo;aile. Il m&rsquo;a donc fallu chercher l&rsquo;origine de ces bugs.</p>
<p><span id="more-17"></span></p>
<h3>Première partie : des variations minimes mais suffisantes</h3>
<p>Les lecteurs avisés me diront que je ne teste pas la même chose, puisque j&rsquo;ai 56 tests sur FireFox et 59 sur IE. C&rsquo;est parce que JUnit sous IE s&rsquo;amuse à évaluer des fonctions telles que celle-ci :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">/** <br />
function testControllers(){}; <br />
*/</div></div>
<p><center>***</center></p>
<p> Avec Prototype, j&rsquo;ai  étendu l&rsquo;objet Element pour y mettre la fonction getParentElement() qui  renvoit le paragraph le plus proche de l&rsquo;élément.<br />
  J&rsquo;utilise donc la ligne :<strong> parent=element.up(&quot;.paragraph&quot;);</strong><br id="s2ok" /><br />
  IE  me renvoit une erreur &quot;Not Implemented&quot;. Je pensais qu&rsquo;il y  avait une erreur avec l&rsquo;implémentation de up() par  Prototype mais en fait mÔnsieur Internet Explorer n&rsquo;accepte pas le nom de variable parent. Essayez<strong> parent=&quot;&quot;</strong> ou <strong>parent=&quot;java&quot;</strong> et vous aurez une erreur &quot;Not Implemented&quot;.<br id="me:o" /><br />
En déclarant la variable<strong> var parent=&quot;&quot;</strong>, tout va mieux.</p>
<p><center>***</center></p>
<p> Il faut ensuite savoir que lorsque vous écriver du code HTML, les moteurs de Firefox et IE les réécrivent derrière vous. Cela se voit en utilisant <strong>alert(monElement.innerHTML)</strong>. J&rsquo;ai repéré deux problèmes notables :</p>
<p>Internet Explorer réécrit <strong><input value=I number=&quot;I&quot;></strong>  au lieu de <strong><input value=&quot;I&quot; number=&quot;I&quot;></strong>. Les guillemets de l&rsquo;attribut value disparait : ce qui fait que value n&rsquo;est d&rsquo;ailleurs plus un attribut au sens xml. Assez génant pour  les tests unitaires tels que celui-ci :<br />
  <strong>assertTrue (divControllers.innerHTML.include(&lsquo; value=&quot;I&quot; &lsquo;));</strong></p>
<p><center>***</center></p>
<p>Internet Explorer réécrit ses balises en majuscules. InnerHTML renvoit H3 au lieu de h3. Il faut donc réécrire les tests :<br />
   <strong>assertTrue(divForm.innerHTML.toLowerCase().include(&lsquo;h3&prime;));</strong><br />
au lieu de   :<br />
   <strong>assertTrue(divForm.innerHTML.include(&lsquo;h3&prime;));</strong></p>
</p>
<h3>Deuxième partie : Le XML avec Prototype</h3>
<p>Dans mes tests unitaires, j&rsquo;utilise une String :</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; var result=&amp;quot;&lt;object&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;lastname&gt;Zozol&lt;/lastname&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;firstname&gt;Nicolas&lt;/firstname&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;web-site&gt;http://www.edupassion.com&lt;/web-site&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;identifiant&gt;1&lt;/identifiant&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;role&gt;professeur&lt;/role&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;level&gt;admin&lt;/level&gt;&amp;quot;+ <br />
&nbsp; &amp;quot;&lt;/object&gt;&amp;quot;;</div></div>
<p>Et je teste ma fonction sensée recevoir transport.responseText.</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; transport=new Object(); <br />
&nbsp; transport.responseText=result; <br />
&nbsp; assertTrue(maFonction(result)==&amp;quot;tout va bien&amp;quot;);</div></div>
<p>Une fonction utilisant transport.responseText est à priori plus facile à tester qu&rsquo;une autre utilisant transport.responseXML.</p>
<p>  <strong>result.select(&quot;firstname&quot;)[0].innerHTML</strong>  fonctionne très bien sous FireFox et me renvoit &laquo;&nbsp;Nicolas&nbsp;&raquo;. Mais sous IE, impossible de parser un  élément non inscrit dans le document ! Prototype fonctionne bien, mais  considère, sous IE, <strong>result </strong>comme une string, et pas comme un ensemble  d&rsquo;élément organisés en arbre. Il est donc nécessaire de passer par responseXML et d&rsquo;ignorer ici les avantages de Prototype.</p>
<p>Le test unitaire de la fonction traitant le résultat devient plus compliqué : le Mock object n&rsquo;est plus une String mais un document. Si vous avez une petite fonction fiable transformant mon  String en document XML, je suis preneur.</p>
<h3>Finalement, on y arrive.</h3>
<table width="100%" border="0">
<tr>
<td><img src="http://nicolas-zozol.ftp-developpez.com/blog/junit-ff-ie/result-final.png" alt="Resultat" title="Résultat" /></td>
</tr>
</table>
<p><br id="fapi" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Créer programmatiquement la bonne balise HTML avec XSLT</title>
		<link>https://blog.developpez.com/java_rest/p5101/xml/creer_programatiquement_la_bonne_balise</link>
		<comments>https://blog.developpez.com/java_rest/p5101/xml/creer_programatiquement_la_bonne_balise#comments</comments>
		<pubDate>Thu, 14 Feb 2008 21:03:07 +0000</pubDate>
		<dc:creator><![CDATA[nicorama]]></dc:creator>
				<category><![CDATA[Astuce du Jour]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce petit article permet au débutants ou occasionnels d&#8217;XML de créer dynamiquement une balise HTML à partir d&#8217;un fichier XML. Edupassion.com fournira un éditeur de cours online spécialement concu pour les besoins d&#8217;un prof. Avec notamment une numérotation des paragraphes de type GrandX, PetitX, et Lettre. Le but du jeu est donc de traduire la balise XML &#60;paragraph depth=&#34;GrandX&#34; number=&#34;II&#34;&#62;value&#60;/paragraph &#62; en &#60;h2&#62;II) value&#60;/h2&#62; pour le XHTML, ou &#60;paragraph depth=&#34;Lettre&#34; number=&#34;c&#34;&#62;value&#60;/paragraph&#62; en &#60;h4&#62;c)value&#60;/h4&#62; XSLT a [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ce petit article permet au débutants ou occasionnels d&rsquo;XML de créer dynamiquement une balise HTML à partir d&rsquo;un fichier XML.</p>
<p>Edupassion.com  fournira un éditeur de cours online spécialement concu pour les besoins  d&rsquo;un prof. Avec notamment une numérotation des paragraphes de type  GrandX, PetitX, et Lettre.<br />
Le but du jeu est donc de traduire la  balise XML &lt;paragraph depth=&quot;GrandX&quot;  number=&quot;II&quot;&gt;value&lt;/paragraph &gt; en  &lt;h2&gt;II)  value&lt;/h2&gt; pour le XHTML, ou &lt;paragraph depth=&quot;Lettre&quot;  number=&quot;c&quot;&gt;value&lt;/paragraph&gt; en  &lt;h4&gt;c)value&lt;/h4&gt;</p>
<p>XSLT  a pour objectif de transformer le Modèle (fichier XML) en Vue (fichier  XHTML), et il eut été logique qu&rsquo;XSLT transformasse aussi les nombres  des paragraphes en caractères adaptés comme &quot;II&quot;, ou &quot;c&quot;. Cette  opération purement fonctionnelle est cependant plus simple et surtout  plus propre à la relecture en utilisant Java.</p>
<p><span id="more-16"></span><br />
Pour résoudre le problème, la première idée qui vient à l&rsquo;esprit est de le traiter cas par cas :</p>
<p>&lt;xsl:template match=&quot;paragraph&quot;&gt;<br />
&lt;xsl:choose&gt;<br />
          &lt;xsl:when test=&quot;./@depth=&rsquo;GrandX&rsquo; &quot;&gt;<br />
               &lt;h2&gt;<br />
                &lt;xsl:value-of select&quot;./@number&quot;/&gt;)&lt;xsl:value-of select&quot;.&quot;/&gt;<br />
               &lt;/h2&gt;<br />
          &lt;/xsl:when&gt;<br />
</p>
<p>&lt;xsl:when test=&quot;./@depth=&rsquo;PetitX&rsquo; &quot;&gt;<br />
          &lt;h2&gt;<br />
                        &lt;xsl:value-of select&quot;./@number&quot;/&gt;)&lt;xsl:value-of select&quot;.&quot;/&gt;<br />
          &lt;/h2&gt;<br />
&lt;/xsl:when&gt;</p>
<p>&lt;xsl:when test=&quot;./@depth=&rsquo;Lettre&rsquo; &quot;&gt;<br />
      &lt;h2&gt;<br />
      &lt;xsl:value-of select&quot;./@number&quot;/&gt;)&lt;xsl:value-of select&quot;.&quot;/&gt;<br />
      &lt;/h2&gt;<br />
&lt;/xsl:when&gt;</p>
<p>&lt;/xsl:choose&gt;<br />
&lt;/xsl:template&gt;</p>
<p>Ca  marche, mais dès que la programmation sera plus complexe (séparation  entre le titre et le corps du paragraphe, ou boutons de controle),  alors le corps de chaque choix se remplira, ce qui n&rsquo;est pas bien beau.  On pourra utiliser &lt;xsl:apply-templates/&gt;, mais là encore,  l&rsquo;imbrication multiples de ces balises n&rsquo;est pas conseillée si ce code  doit être lu par des collègues non expert en XSLT.<br />
<br />
Comme la balise choisie est variable, nous allons tout logiquement utiliser une variable, et créer un element dynamiquement.</p>
<p>&lt;xsl:template match=&quot;paragraph&quot;&gt;</p>
<p>      &lt;xsl:variable name=&quot;baliseVar&quot;&gt;<br />
      &lt;xsl:choose&gt;<br /> <br />
        &lt;xsl:when test=&quot;./@depth=&rsquo;GrandX&rsquo; &quot;&gt;h2&lt;/xsl:when&gt;<br />
     &lt;xsl:when test=&quot;./@depth=&rsquo;PetitX&rsquo; &quot;&gt;h3&lt;/xsl:when&gt;<br />
        &lt;xsl:when test=&quot;./@depth=&rsquo;Lettre&rsquo; &quot;&gt;h4&lt;/xsl:when&gt;<br />
        &lt;xsl:otherwise&gt;h4&lt;/xsl:otherwise&gt;</p>
<p>       &lt;/xsl:choose&gt;<br />
       &lt;/xsl:variable&gt;</p>
<p>&lt;xsl:element name=&quot;{$baliseVar}&quot;&gt;<br />
&lt;xsl:value-of select=&quot;./@number&quot;/&gt;)<br />
&lt;xsl:value-of select&quot;.&quot;/&gt;<br />
&lt;/xsl:element&gt;<br />
&lt;/xsl:template&gt;<br />
<br />
On  ne gagne pas immédiatement en nombre de lignes, mais beaucoup en  clarté, car les deux problèmes sont clairement disjoints. Attention  toutefois à l&rsquo;utilisation des accolades dans &lt;xsl:element  name=&quot;{$baliseVar}&quot;&gt; , car contrairement au PHP, &quot;$baliseVar&quot; ne  sera pas traité par le processeur XSLT comme une variable, mais comme  un texte normal.</p>
<p>L&rsquo;utilisation des variables en XSLT est très  efficace pour se sortir des sentiers tortueux d&rsquo;XPATH. Mais XSLT a ses  limites, et je conseille fortement de faire les opérations les plus  complexes avec un langage comme Java &amp; JDOM.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
