Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1482 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Transformation XML==>Javascript : pb avec une affectation multi-lignes

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transformation XML==>Javascript : pb avec une affectation multi-lignes

n°588936
cypress
La colline de cyprès
Posté le 12-12-2003 à 11:17:26  profilanswer
 

Salut,
 
Sois ce fichier XML :
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="ordre.xsl"?>
<racine>
   <contenu>
      <sg i="SVIERGE" f="#f2fde8" t="0" l="0" h="480" a="720" />
      <h i="TXTPOR" v=" 35786" />
   </contenu>
 
   <ordres>
      <f m="ROOT" />
      <op m="F01" t="361" l="406" h="220" a="291" />
    </ordres>
</racine>

 
Sois le fichier XSL :
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" />
<xsl:output method="html"/>
<xsl:template match="/">
<xsl:apply-templates />
<xsl:for-each select="/racine//*">              
 
  <!-- ORDRES -->
  <xsl:if test="name()='ordres'">
    <xsl:for-each select="./*">
      <xsl:choose>
        <xsl:when test="name()='op'">
op('<xsl:value-of select="@m" />','<xsl:value-of select="@t" />','<xsl:value-of select="@l" />','<xsl:value-of select="@h" />','<xsl:value-of select="@a" />');                              
        </xsl:when>
        <xsl:when test="name()='f'">
f('<xsl:value-of select="@m"/>');
        </xsl:when>
      </xsl:choose>
    </xsl:for-each>  
 
 
  </xsl:if>
 
  <!-- CONTENU -->
  <xsl:if test="name()='contenu'">
contenu='<HTML><HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-16"></META><TITLE>GLOBALgram</TITLE></HEAD><BODY id="first" style="background-color:transparent"><DIV id="principal"></DIV><DIV id="images"></DIV>';
   <xsl:for-each select="./*">              
      <xsl:choose>
        <xsl:when test="name()='sg'">          
<SPAN>
<xsl:attribute name="style">border:none;font-family:verdana;position:absolute;background-color:<xsl:value-of select="@f" />;top:<xsl:value-of select="@t" />;left:<xsl:value-of select="@l" />;width:<xsl:value-of select="@a" />;height:<xsl:value-of select="@h" />;</xsl:attribute></SPAN>\
        </xsl:when>
 
      </xsl:choose>
    </xsl:for-each>
</BODY></HTML>';
  </xsl:if>
 
</xsl:for-each>  
</xsl:template>
</xsl:stylesheet>

 
 
 
Explication :
 
je recois ce flux XML sur IE dans une frame. En Javascript, sur une autre frame où se situe déjà des fonctions, j'applique la feuille de style au flux :
 
res+=flux.transformNode(xslForme);
   eval(res);

 
Donc le XSL me transforme les ordres en appels javascript aux fonction op() et f(). Si je fais un eval de ce résultat, OK çà exécute bien les fonctions.
Je voudrais que le XSL me transforme les contenus en un ordre javascript comme celui-ci :
 
contenu='<html><body>....<span...></html>' etc...';
 
pour ensuite faire un eval() dessus.
 
Mon problème : le résultat me mets çà sur plusieurs lignes :
 
contenu='<html><body>...
<span...>
</span>
';

Donc quand on fait un eval là-dessus, çà merde.
Donc j'ai mis des \ au bout car c comme çà qu'on fait du multi-lignes dans un chaine en javascript.
Mais çà ne résoud rien.
 
Donc j'en suis là.
 
Vous avez une idée ?
 
Merci !!


---------------
Savoir c'est vivre, et maintenir dans l'ignorance c'est presque un homicide
mood
Publicité
Posté le 12-12-2003 à 11:17:26  profilanswer
 

n°588943
avander
Posté le 12-12-2003 à 11:25:37  profilanswer
 

Essaye de virer tout les retour à la ligne dans ton template pcq. tu ne les voit pas mais le moteur de transformation lui les voit et les reprends...


...
  <!-- ORDRES -->
  <xsl:if test="name()='ordres'">
    <xsl:for-each select="./*">
      <xsl:choose>
        <xsl:when test="name()='op'">op('<xsl:value-of select="@m" />','<xsl:value-of select="@t" />','<xsl:value-of select="@l" />','<xsl:value-of select="@h" />','<xsl:value-of select="@a" />');</xsl:when><!-- ICI -->
        <xsl:when test="name()='f'">f('<xsl:value-of select="@m"/>');</xsl:when><!-- ICI -->
      </xsl:choose>
    </xsl:for-each>  
...


 
C'est vrai que le template devient moins lisible mais parfois il faut bien passer par là :-((.


Message édité par avander le 12-12-2003 à 11:27:48
n°588947
cypress
La colline de cyprès
Posté le 12-12-2003 à 11:30:07  profilanswer
 

Arf oui mais quelle galère pour maintenir le fichier XSL après !


---------------
Savoir c'est vivre, et maintenir dans l'ignorance c'est presque un homicide
n°589010
avander
Posté le 12-12-2003 à 11:55:48  profilanswer
 

Si qq. connait un moyen de contourner ce problème autrement qu'il parle! :-))

n°589089
youdontcar​e
Posté le 12-12-2003 à 13:32:45  profilanswer
 

eval(tastring.split('\r\n').join(''));

n°589090
chocoboy
Posté le 12-12-2003 à 13:34:56  profilanswer
 

en mettant ça au début :
 

Code :
  1. <xsl:output method="xml" indent="no" encoding="ISO-8859-1" omit-xml-declaration="yes" />


 
ca te convient ou pas ?
 
sinon, y a un autre moyen

n°589094
chocoboy
Posté le 12-12-2003 à 13:45:31  profilanswer
 

sinon, je ne comprend pas pourquoi tu le fais aussi compliqué ton XSL ?
 
la structure de ton XML est elle figée ou pas ?
est tu susceptibles d'avoir des structures de noeud différentes (plusieurs <sg>, <h>....etc ?

n°589099
cypress
La colline de cyprès
Posté le 12-12-2003 à 13:57:01  profilanswer
 

youdontcare a écrit :

eval(tastring.split('\r\n').join(''));


 
Cà marche, merci !!!!


---------------
Savoir c'est vivre, et maintenir dans l'ignorance c'est presque un homicide
n°589100
cypress
La colline de cyprès
Posté le 12-12-2003 à 13:58:31  profilanswer
 

chocoboy a écrit :

sinon, je ne comprend pas pourquoi tu le fais aussi compliqué ton XSL ?
 
la structure de ton XML est elle figée ou pas ?
est tu susceptibles d'avoir des structures de noeud différentes (plusieurs <sg>, <h>....etc ?


 
la structure du XML est figée et je suis susceptible d'avoir plusieurs sg ou h etc...
En fait il s'agit d'une génération d'écran à la volée à partir d'un flux XML, c'est pour çà que çà semble un peu complexe. Mais évidemment je peux surement optimiser tout çà  :)


---------------
Savoir c'est vivre, et maintenir dans l'ignorance c'est presque un homicide
n°589116
chocoboy
Posté le 12-12-2003 à 14:14:30  profilanswer
 

cypress a écrit :


 
la structure du XML est figée et je suis susceptible d'avoir plusieurs sg ou h etc...
En fait il s'agit d'une génération d'écran à la volée à partir d'un flux XML, c'est pour çà que çà semble un peu complexe. Mais évidemment je peux surement optimiser tout çà  :)  


 
je sais pas exactement ce que tu dois obtenir en sortie, mais ce XSL sera plus facile à maintenir :
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:output method="xml" indent="no" encoding="ISO-8859-1" omit-xml-declaration="yes"  />
  4. <xsl:template match="/">
  5. contenu='<HTML><HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-16"></META><TITLE>GLOBALgram</TITLE></HEAD><BODY id="first" style="background-color:transparent"><DIV id="principal"></DIV><DIV id="images"></DIV>';
  6. <xsl:apply-templates />
  7. </BODY></HTML>';
  8. </xsl:template>
  9. <xsl:template match="contenu|ordre">
  10. <xsl:apply-templates />
  11. </xsl:template>
  12. <xsl:template match="sg">
  13. <SPAN style="border:none;font-family:verdana;position:absolute;background-color:{@f};top:{@t};left:{@l};width:{@a};height:{@h}" />
  14. </xsl:template>
  15. <xsl:template match="h" />
  16. <xsl:template match="f|op">
  17. <xsl:value-of select="name()" />('<xsl:apply-templates select="@*" />');
  18. </xsl:template>
  19. <xsl:template match="@*">
  20. <xsl:value-of select="." />
  21. <xsl:if test="position()!=last()">,</xsl:if>
  22. </xsl:template>
  23. </xsl:stylesheet>

mood
Publicité
Posté le 12-12-2003 à 14:14:30  profilanswer
 

n°589120
cypress
La colline de cyprès
Posté le 12-12-2003 à 14:25:27  profilanswer
 

chocoboy a écrit :


 
je sais pas exactement ce que tu dois obtenir en sortie, mais ce XSL sera plus facile à maintenir :
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  3. <xsl:output method="xml" indent="no" encoding="ISO-8859-1" omit-xml-declaration="yes"  />
  4. <xsl:template match="/">
  5. contenu='<HTML><HEAD><META http-equiv="Content-Type" content="text/html; charset=UTF-16"></META><TITLE>GLOBALgram</TITLE></HEAD><BODY id="first" style="background-color:transparent"><DIV id="principal"></DIV><DIV id="images"></DIV>';
  6. <xsl:apply-templates />
  7. </BODY></HTML>';
  8. </xsl:template>
  9. <xsl:template match="contenu|ordre">
  10. <xsl:apply-templates />
  11. </xsl:template>
  12. <xsl:template match="sg">
  13. <SPAN style="border:none;font-family:verdana;position:absolute;background-color:{@f};top:{@t};left:{@l};width:{@a};height:{@h}" />
  14. </xsl:template>
  15. <xsl:template match="h" />
  16. <xsl:template match="f|op">
  17. <xsl:value-of select="name()" />('<xsl:apply-templates select="@*" />');
  18. </xsl:template>
  19. <xsl:template match="@*">
  20. <xsl:value-of select="." />
  21. <xsl:if test="position()!=last()">,</xsl:if>
  22. </xsl:template>
  23. </xsl:stylesheet>




 
Effectivement c'est bien mieux que ce que je fais. Et oui je débute un peu en XSL. Je te remercie pour ton aide.
 
Merci !


---------------
Savoir c'est vivre, et maintenir dans l'ignorance c'est presque un homicide

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Transformation XML==>Javascript : pb avec une affectation multi-lignes

 

Sujets relatifs
comment faire ? insertion dynamique de lignes dans un tableauproblème avec les la transformation de lien en BBCode
[Javascript] effet de texte ds la barre de défilement...[Javascript]Différence entre self.location et document.location
[ASP.NET] affiche le resultat sur plusieurs lignesContraintes sur schéma XML
Modifier la priorite de Gestionnaire d'evenement en JavaScriptJavascript dans Acrobat Writer
[Javascript] verifier l'existance d'un fichier[javascript] recuperation d'une variable dans une url
Plus de sujets relatifs à : Transformation XML==>Javascript : pb avec une affectation multi-lignes


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR