xslt + mozilla + documentfragment
salut,
je souhaiterais transformer un fichier xml avec un fichier xslt sous mozilla et mettre le résultat de cette transformation dans une balise div.
j'ai sû faire ce parsage mais mon problème c'est que le résultat de cette transformation est un documentfragment alors lorsque je fait mondiv.innerHTML = résultat de la transformation ça ne me donne rien. aussi j'ai fait mondiv.appendChild(résultat de la transformation) alors elle met le résultat dans la balise div mais elle enlève tous ce qui est balise html. lorsque le résultat est <table><tr><td>xxx</td></tr><tr><td>yyyy</td></tr></table> alors la balise div affiche xxxyyyy sans qu'elle prenne le format
Pouvez vous m'aider
Merci
résultat de la transformation
Bonjour,
Citation:
... j'ai sû faire ce parsage ...
Peux-tu présenter le résultat de ta transformation pour commencer ?
En attendant bon courage,
Xavier
xslt + mozilla + documentfragment
salut,
Voici le résultat que j'ai trouvé
06/04/2006 zea 06/04/2006 22/03/2006 r"fd"a 10/03/2006 azerty
Merci
xslt + mozilla + documentfragment
salut,
voici un example de mon fichier xml
Citation:
<?xml version="1.0" encoding="UTF-8" ?>
<viewentries toplevelentries="5">
<viewentry position="1" unid="7D18181B041914DC4125714E0065967D" noteid="20ED6" siblings="5">
<entrydata columnnumber="0" name="date">
<text>20060412|12/04/2006</text>
</entrydata>
<entrydata columnnumber="1" name="priority">
<text />
</entrydata>
<entrydata columnnumber="2" name="objet">
<text>sdfg</text>
</entrydata>
</viewentry>
<viewentry position="2" unid="3965E3015F4E0E66412571480078EF98" noteid="20E1E" siblings="5">
<entrydata columnnumber="0" name="date">
<text>20060406|06/04/2006</text>
</entrydata>
<entrydata columnnumber="1" name="priority">
<text />
</entrydata>
<entrydata columnnumber="2" name="objet">
<text>zea</text>
</entrydata>
</viewentry>
<viewentry position="3" unid="BFD5E0066ECA0B344125714800790109" noteid="20E26" siblings="5">
<entrydata columnnumber="0" name="date">
<text>20060406|06/04/2006</text>
</entrydata>
<entrydata columnnumber="1" name="priority">
<text />
</entrydata>
<entrydata columnnumber="2" name="objet">
<text />
</entrydata>
</viewentry>
<viewentry position="4" unid="4604E7C841C8F65E4125714800791244" noteid="20E2A" siblings="5">
<entrydata columnnumber="0" name="date">
<text>20060322|22/03/2006</text>
</entrydata>
<entrydata columnnumber="1" name="priority">
<text />
</entrydata>
<entrydata columnnumber="2" name="objet">
<text>r"fd"a</text>
</entrydata>
</viewentry>
<viewentry position="5" unid="F21693EB4B3551654125712D007501B1" noteid="1E56E" siblings="5">
<entrydata columnnumber="0" name="date">
<text>20060310|10/03/2006</text>
</entrydata>
<entrydata columnnumber="1" name="priority">
<text />
</entrydata>
<entrydata columnnumber="2" name="objet">
<text>azerty</text>
</entrydata>
</viewentry>
</viewentries>
et voci mon fichier xsl
Citation:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xalan="http://xml.apache.org/xslt">
<xsl:template match="//viewentry">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td class="standard" style="cursor:hand;font-family:tahoma;font-size:12px">
<xsl:attribute name="onclick">
javascript:window.open('http://dev6/bo_app.nsf/<xsl:value-of select="@unid"/>?OpenDocument','OpShip','top=0,left=0,width=800,height=550,toolbar=no,status,menubar=no,scrollbars=yes,resizable=no')
</xsl:attribute>
<li>
<xsl:if test="normalize-space(entrydata[@name='priority']) != ''">
<img border="0">
<xsl:attribute name="src">
/icons/vwicn<xsl:value-of select="entrydata[@name='priority']"/>
</xsl:attribute>
</img>
</xsl:if>
<xsl:value-of select="substring-after(entrydata[@name='date'],'|')"/>
<br/>
<xsl:value-of select="entrydata[@name='objet']"/>
</li>
<br/>
</td>
</tr>
</table>
</xsl:template>
</xsl:stylesheet>
et voici mon code javascript
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| var xmlDoc
function loadXML(){
//load xml file
// code for IE
if (window.ActiveXObject){
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load("http://dev6/bo_app.nsf/(DXL Departs scroll)?readviewentries&start=1&count=5&restricttocategory=Hichem Hbaieb");
var oXsl = new ActiveXObject("Microsoft.XMLDOM");
oXsl.async = false;
oXsl.load("http://dev6/bo_app.nsf/DXL courriers scroll.xsl?OpenPage");
strRet = xmlDoc.transformNode(oXsl);
document.getElementById("idContent").innerHTML = strRet;
}
// code for Mozilla, etc.
else if (document.implementation && document.implementation.createDocument){
var xsltProcessor = new XSLTProcessor();
var oXsl = document.implementation.createDocument("http://www.w3.org/1999/XSL/Transform","stylesheet",null);
oXsl.load("http://dev6/bo_app.nsf/DXL courriers scroll.xsl?OpenPage");
oXsl.onload=function (){
xsltProcessor.importStylesheet(oXsl);
xmlDoc= document.implementation.createDocument("","",null);
xmlDoc.load("http://dev6/bo_app.nsf/(DXL Departs scroll)?readviewentries&start=1&count=5&restricttocategory=Hichem Hbaieb");
xmlDoc.onload=function (){
var htmlFragment = xsltProcessor.transformToFragment(xmlDoc, document);
document.getElementById("idContent").appendChild(htmlFragment);
}
}
}else alert('Your browser cannot handle this script');
} |
Mais le résultat de la transformation est
Citation:
20060412|12/04/2006 sdfg
20060406|06/04/2006 zea
20060406|06/04/2006
20060322|22/03/2006 r"fd"a
20060310|10/03/2006 azerty
La transformation n'est pas pris en charger
Je pense que la faute n'est pas dans le fichier de style car sur IE La transformation est faite et je trouve le résultat désiré
Pouvez vous m'aider
Merci
Problème de paramètre XSL
Bonjour,
Donc, je pense avoir trouvé le problème.
Le résultat que tu obtiens, je l'ai obtenu en passant en paramètre comme nom de la feuille de style une chaîne vide.
Je pense donc que
Code:
1 2
|
oXsl.load("http://dev6/bo_app.nsf/DXL courriers scroll.xsl?OpenPage"); |
te renvoie une chaîne vide.
J'ai regarder rapidement, apparemment tu appelles un fichier de base de données Lotus Notes, je n'y connais rien du tout, par curiosité, la forme pour récupérer un fichier nommé "leFichierQueJeveux" c'est ::
http://monServeur.monFicher.nsf/leFichierQueJeveux?OpenPage
C'est bien ça ?
Voilà pour le problème de base ensuite trois petits détails :
1.
Ca m'interfère pas sur ton problème(en tout cas chez moi), mais de manière générale, il nest pas conseillé d'utiliser des espaces dans les noms de fichier
Code:
1 2
|
http://dev6/bo_app.nsf/DXL courriers scroll.xsl?OpenPage |
Tu pourrais penser à le renommer
Citation:
DXL_courriers_scroll.xsl
ou
Citation:
DXLCourriersScroll.xsl
2.
Dans ta feuille de style, tu utilises une propriété pour le curseur spécifique à IE, ce qui aboutie à ce que le résultat sous Mozilla n'affiche pas la main sur tes liens.
Vers la ligne 10 , que tu pourrais remplacer, par , qui est compatible Gecko et IE 6(à toi de faire les tests pour tes navigateurs cibles), ou en rajoutant par exemple une condition dans ta feuille de style sur un paramètre indiquant le navigateur.
3.
Avec ta version IE, tu affectes tout le contenu de l'élément :
Code:
1 2
|
document.getElementById("idContent").innerHTML = strRet; |
alors que sous Gecko, tu rajoutes au contenu déjà présent ton résultat :
Code:
1 2
|
document.getElementById("idContent").appendChild(htmlFragment); |
Ce veut dire que si tu appelles ta fonction 5 fois sous IE avec un contenu valant "a", ton contenu sera "a", alors que sous gecko il vaudra "aaaaa".
Juste pour avoir le même résultat, tu peux vider le contenu de ton élément avant :
Code:
1 2 3
|
document.getElementById("idContent").innerHTML='';
document.getElementById("idContent").appendChild(htmlFragment); |
Sinon, ça marche nikel je trouve pour ma part.
Pour information, la documentation de référence sur XSLT et Gecko ::
http://developer.mozilla.org/en/docs...ransformations
4.
Dans ta feuille de style, tu fais référence à un espace de nom "xalan" jamais utilisé, de ce que j'en vois, qui est à priori superflu et que tu peux donc enlever.
Code:
1 2
|
xmlns:xalan="http://xml.apache.org/xslt" |
Voilà,
@+
Xavier