2009-06-26 10 views
3

J'utilise xslt côté client pour transformer des fichiers xml en xhtml. Il y a eu quelques obstacles mais j'ai réussi à les dépasser tous sauf à ça.côté client xslt avec javascript dans firefox

Le problème est que lorsque j'ai un simple fichier xml comme celui-ci

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="./jsInFf.xsl"?> 
<root>hello</root> 

et le transformer en xhtml avec un simple xsl comme celui-ci

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xmlns="http://www.w3.org/1999/xhtml"> 

    <xsl:output method="xml" 
    version="1.0" 
    encoding="ISO-8859-1" 
    indent="yes" 
    omit-xml-declaration="no" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/> 

    <xsl:template match="/"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
     <title>a title</title> 
     <script type="text/javascript"> 
      alert(document); 
      alert(document.anchors); 
    </script> 
     </head> 
     <body> 
     <xsl:value-of select="." /> world 
     </body> 
    </html> 
    </xsl:template>  
</xsl:stylesheet> 

la première alerte pop-up comme "[object XMLDocument]" avec firefox au lieu de "[object]" comme pour IE et safari. D'après ce que je comprends, cela signifie que firefox ne produit pas de document javascript html (ou html dom, je ne suis pas sûr du libellé). La seconde alerte dans firefox sera "indéfinie" mais dans IE et safari elle est "[objet]

Donc dans firefox il n'y a pas document.forms ou document.anchors etc. Je sais que le javascript fonctionnera toujours, comme document.getElementById, mais j'ai peur que des choses plus avancées comme ajax ne fonctionnent pas si document.forms et autres n'existent pas

Y a-t-il une solution de rechange pour cela? tas de pages à utiliser xslt.Il ya beaucoup de javascipt déjà écrit et en changeant tout pour utiliser le firefox javascript limitée n'est pas vraiment une option si elle est encore possible

Merci beaucoup pour toute aide

+0

oh ... s'il vous plaît ne pas ... comment pouvez-vous vérifier que le code HTML généré est valide? pourquoi le faire du côté client? (en plus de la performance ...) – elcuco

+0

"Sur mon projet actuel, je suis en train de réécrire un tas de pages pour utiliser xslt." Pourquoi? –

+0

Je fais le côté client des transformations pour la performance. Le html et les transformations ne sont pas terriblement compliqués donc tout devrait valider.Pour les anciens navigateurs sans support pour xslt et pour google bots je ferai le côté serveur de transformation. –

Répondre

4

1) Fixation de votre problème

Résoudre votre problème est aussi simple que de changer la valeur de la @method attribut de "xml" à "html" sur élément xsl: output.

2) Explication de la différence

HTML DOM étend interfaces DOM XML de base. Ainsi, par exemple, la collection "forms" n'est pas présente dans XMLDocument, mais dans HTMLDocument

+0

Merci. Ce problème a perdu trop de temps et votre conseil a finalement résolu beaucoup de problèmes ici. – soletan

0

La raison pour laquelle j'ai utilisé xml était que je voulais utiliser xhtml pour la sortie. Puisque je fais les transformations du côté client, je suis limité à xslt 1.0 et xhtml n'est pas une option. J'avais vu sur plusieurs sites que le moyen de sortir xhtml était de sélectionner xml et d'utiliser la déclaration omit-xml. Je suppose que c'est ce qui faisait que firefox crée le DOM xml. En suivant les conseils de Sergey, j'ai changé ma méthode de sortie et tout semble fonctionner. Voilà à quoi il ressemble maintenant

<xsl:output method="html" 
    encoding="ISO-8859-1" 
    indent="yes" 
    doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/> 

J'ai vérifié le doctype dans IE. Il dit toujours que c'est xhtml même si la méthode est html. Je ne sais pas pourquoi tant de sites suggèrent la méthode de sortie xml hack ...

Merci d'expliquer la différence avec les DOM xml et html. Par curiosité, existe-t-il un moyen de créer manuellement un dom html à partir du dom XML?

+0

Je ne pouvais pas augmenter le poste de Sergey ou le commenter puisque je n'ai pas assez de rep. Je devais créer une réponse pour continuer la discussion. –

Questions connexes