Transformation XML==>Javascript : pb avec une affectation multi-lignes - XML/XSL - Programmation
Marsh Posté le 12-12-2003 à 11:25:37
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...
|
C'est vrai que le template devient moins lisible mais parfois il faut bien passer par là :-((.
Marsh Posté le 12-12-2003 à 11:30:07
Arf oui mais quelle galère pour maintenir le fichier XSL après !
Marsh Posté le 12-12-2003 à 11:55:48
Si qq. connait un moyen de contourner ce problème autrement qu'il parle! :-))
Marsh Posté le 12-12-2003 à 13:34:56
en mettant ça au début :
Code :
|
ca te convient ou pas ?
sinon, y a un autre moyen
Marsh Posté le 12-12-2003 à 13:45:31
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 ?
Marsh Posté le 12-12-2003 à 13:57:01
youdontcare a écrit : eval(tastring.split('\r\n').join('')); |
Cà marche, merci !!!!
Marsh Posté le 12-12-2003 à 13:58:31
chocoboy a écrit : sinon, je ne comprend pas pourquoi tu le fais aussi compliqué ton XSL ? |
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 çà
Marsh Posté le 12-12-2003 à 14:14:30
cypress a écrit : |
je sais pas exactement ce que tu dois obtenir en sortie, mais ce XSL sera plus facile à maintenir :
Code :
|
Marsh Posté le 12-12-2003 à 14:25:27
chocoboy a écrit :
|
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 !
Marsh Posté le 12-12-2003 à 11:17:26
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