Insérer du code xml dans un xhtml

Insérer du code xml dans un xhtml - XML/XSL - Programmation

Marsh Posté le 25-04-2007 à 14:52:22    

Bonjour, j'ai besoin de mélanger dans un même document du code xhtml et xml afin de le récupérer et le manipuler à partir de javascript par la suite. J'ai donc écris naïvement ce code en me doutant qu'il y a un problème :
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/dtD/xhtml1-strict.dtd">
  2. <html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml" xmlns:monxml="http://www.w3.org/TR/REC-xml">
  3. <head>
  4.   <title>...</title>
  5. </head>
  6. <body>
  7.   <div>blabla</div>
  8.   <monxml:album id="mabalisexml">blabla</monxml:album>
  9. </body>
  10. </html>


Le problème c'est que ce code ne passe pas la validation et fonctionne pas super non plus :d  
 
La balise "monxml:album" contiendra un document xml et devrait normalement être en xml "pur", pas en xhtml et donc pas interprétée par les navigateurs. Avez-vous une idée?

Reply

Marsh Posté le 25-04-2007 à 14:52:22   

Reply

Marsh Posté le 25-04-2007 à 14:55:32    

c'est à dire ? tu veux afficher le code c'est ça ?
 
balise <pre>
 
par contre, cela ne t'affranchis pas il me semble d'échapper les caractères spéciaux tels que :
 
<, > et &

Reply

Marsh Posté le 25-04-2007 à 17:54:31    

fils_de_la_lumiere a écrit :

Le problème c'est que ce code ne passe pas la validation et fonctionne pas super non plus :d


A mon avis ça ne valide pas parce que tu as un doctype xhtml, donc le browser ne s'attend pas à trouver un élément monxml:album en plein milieu. Si tu veux y ajouter un document à toi j'imagine que tu dois l'étendre (ceci est intéressant http://dionidium.com/2004/05/xhtml-tests).
 
Par contre j'imagine que tu comptes générer du xhtml à partir de ton album en le manipulant le DOM et le retirer complètement? Il faut voir à quel moment cette manipulation est faite. Peut-être que si elle a lieu avant que le browser ne valide la page ça passera...

Reply

Marsh Posté le 25-04-2007 à 18:06:21    

perso je ferais un coup de xslt pour faire xml=>xhtml  avant de taper en js dessus.

Reply

Marsh Posté le 25-04-2007 à 20:12:34    

ben justement, là est la question : il s'agit d'afficher un bloc de code source XML, ou afficher le contenu de ce flux XML ?
si c'est la seconde réponse alors comme anapajai a dit, il faut passer par un XSL...

Reply

Marsh Posté le 25-04-2007 à 21:10:53    

En fait je récupère du code xhtml en ajax pour mettre à jour un élément div principal (classique quoi :o ) mais aussi quelque autres petits éléments textuels de la page et pour cela j'aimerai inclure dans ce code xhtml du code xml.

Reply

Marsh Posté le 25-04-2007 à 22:27:29    

Je viens de faire un petit test avec Firefox de ce que je disais, deux constatations
- le fait de mettre un élément que j'ai défini moi-même ne le gêne pas, il ne traite pas le tag (foo) mais il prend le texte qu'il contient (bar)
- pas de problème non plus si on retire le noeud via le DOM.
 
Si ça peut t'inspirer, voilà le code:

Code :
  1. <?php
  2. header("Content-type: " .
  3.  (stristr($_SERVER["HTTP_ACCEPT"], "application/xhtml+xml" ) ? "application/xhtml+xml" : "text/html" ));
  4. echo("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
  5. ?>
  6. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  7. <html xmlns="http://www.w3.org/1999/xhtml">
  8. <head>
  9. <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />
  10. </head>
  11. <script type="text/javascript">
  12. // <![CDATA[
  13. function init() {
  14.  var foo = document.getElementsByTagNameNS("urn:foo", "foo" )[0];
  15.  foo.parentNode.removeChild(foo);
  16. }
  17. // ]]>
  18. </script>
  19. <body onload="init();">
  20. <foo xmlns="urn:foo">bar</foo>
  21. </body>
  22. </html>

Reply

Marsh Posté le 26-04-2007 à 03:53:45    


merci, le script me met sur la piste pour la suite mais le code ne passe pas le validator
 
Error  : there is no attribute "xmlns".
Error  : element "foo" undefined.

Reply

Marsh Posté le 26-04-2007 à 10:03:12    

Oui, j'ai bien peur que pour pouvoir passer le test de validation il faille étendre le DTD xhtml1-strict...

Reply

Marsh Posté le 26-04-2007 à 10:27:58    

vu que t'as l'air partie en full js, pourquoi ne pas faire un xsltProcessor ( en js hein) pour transformer ton xml en xhtml "valide".

Reply

Marsh Posté le 26-04-2007 à 10:27:58   

Reply

Marsh Posté le 26-04-2007 à 12:59:29    

Parce que la fonction est déjà offerte en javascript par les browsers. :whistle:
Voir ceci aussi http://code.google.com/p/ajaxslt/.

Reply

Marsh Posté le 26-04-2007 à 13:05:43    

car je veux faire ça en une requête, je veux recevoir le code xhtml + d'autres infos en xml dans la même réponse. Sinon je peux demander au serveur de renvoyer un truc du genre pour récuperer les valeurs en js mais c'est très crade je trouve :
 

Code :
  1. <form action="blabla">
  2. <input type="hidden" id="param1" value="value1" />
  3. <input type="hidden" id="param2" value="value2" />
  4. </form>
  5. <div>code xhtml</div>

Reply

Marsh Posté le 26-04-2007 à 14:03:46    

rx__ a écrit :

Parce que la fonction est déjà offerte en javascript par les browsers. :whistle:
Voir ceci aussi http://code.google.com/p/ajaxslt/.


NO KIDDIN ?!?!
et ça s'appelle comment hein? A bin en faisant "new XSLTProcessor" ... http://developer.mozilla.org/en/do [...] formations
edit avant qu'on me reprenne: sous IE pas besoin


Message édité par anapajari le 26-04-2007 à 14:04:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed