IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] Entités HTML extraites d'un XML avec JS pas interprétées


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut [AJAX] Entités HTML extraites d'un XML avec JS pas interprétées
    Salut, je suis en train de faire une petite application en AJAX. Une liste avec des filtres sous forme de case à cocher.

    Tout fonctionne très bien hormis qu'il existe encore un petit problème au niveau des caractères spéciaux. Je travaille qu'avec des caractères sous la forme d'entités HTML et encodage UTF-8 (base de données MySQL et fichier XML compris).

    Le problème c'est lorsque je parcours mon XML avec JavaScript et que je récupère les données pour les afficher dans un tableau que je crée à la volée, les entités HTML apparaissent telle quelles au lieu d'afficher les caractères coresspondants.

    Voilà à quoi ressemble mon XML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <users>
         <user id="1">
              <name><![CDATA["GUILLARD"]]></name>
              <firstname><![CDATA["Aur&eacute;lien"]]></firstname>
              <phone>xxxxxxxxxx</phone>
              <mobile>xxxxxxxxxx</mobile>
              <mail>xxxxxxxxxx@gmail.com</mail>
         </user>
    </users>
    Je récupère les données de cette manière en JS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var text = removeQuotes(getText(items.item(i).childNodes[1]) + " " + getText(items.item(i).childNodes[0]));
    removeQuotes() est une fonction perso pour enlever les apastrophes générées par les CDATA et getText() est une fonction perso pour utiliser .text ou .textContent suivant les navigateurs webs.

    Et donc, à l'affichage , j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Aur&eacute;lien GUILLARD	xxxxxxxxxx@gmail.com	xxxxxxxxxx	xxxxxxxxxx
    Au lieu d'avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Aurélien GUILLARD	xxxxxxxxxx@gmail.com	xxxxxxxxxx	xxxxxxxxxx
    Quelqu'un a une idée de pourquoi les entités HTML ne sont pas interprétées ?

    Merci beaucoup

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ca doit venir de ta fonction getText : si tu transformes du contenu en texte, les entités HTML deviennent... du texte, donc affichées comme du texte
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Ba comment je peux récupérer mes données en JS si je n'utilise pas .text ou .textContent sachant que .nodeValue me renvoie null à chaque pour une raison inconnue...

    Autrement, on m'a dit qu'il ne fallait pas utiliser de CDATA. Que c'était inutile dans mon cas.

    Cependant, si je les enlève, mon XML n'est pas valide, Firefox me donne l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Erreur d'analyse XML : entité non définie
    Internet Explorer me donne l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Erreur de traitement de la ressource
    et Opera me renvoie l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    well-formedness constraint: entity declared
    Bref, mon XML semble incorrect si il contient des entités HTML.

    Le problème, ce que je suis obligé de faire avec ces entités HTML, je vais chercher mes données dans une base de données MySQL où les données sont enregistrées de cette manière.

    La question revient donc à déterminer comment on peut enregistrer des entités HTML dans un XML...

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Désolé, je ne suis pas sûr de bien comprendre ton problème...
    Tu crées une fonction Ajax pour récupérer des données à partir d'une base MySQL.
    J'imagine que cette fonction appelle un script PHP qui interroge ta base, récupère les éléments et construit un fichier XML (sinon, d'où sort le fichier XML dont tu nous parle).

    Donc, il semble logique que ton PHP renvoie le fichier XML, que tu peux interpréter soit en texte (responseText) soit en XML (responseXML).
    Du coup, ta fonction Ajax récupère du XML, l'interprète, puis insère les données récupérées (dans lesquelles les entités RESTERONT des entités).

    Je ne comprend pas pourquoi tu veux récupérer du texte...

    Pour ce qui est des erreurs du XML, ça semble logique qu'un navigateur qui reçoit du XML sans DTD n'arrive pas à le lire, en l'occurence, il faut le traiter en javascript avant de l'insérer dans le html
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    J'ai réussi à résoudre mon problème

    En fait, faut réécrire une DTD perso en spécifiant des entités pour que les entités HTML soient interprétées.

    Mon XML ressemble donc à ça avec le DTD inclu dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
    <!DOCTYPE users [
    <!ENTITY Agrave "À">
    <!ENTITY Aacute "Á">
    <!ENTITY Acirc "Â">
    <!ENTITY AElig "Æ">
    <!ENTITY Ccedil "Ç">
    <!ENTITY Egrave "È">
    <!ENTITY Eacute "É">
    <!ENTITY Ecirc "Ê">
    <!ENTITY Igrave "Ì">
    <!ENTITY Iacute "Í">
    <!ENTITY Icirc "Î">
    <!ENTITY Ograve "Ò">
    <!ENTITY Oacute "Ó">
    <!ENTITY Ocirc "Ô">
    <!ENTITY Ugrave "Ù">
    <!ENTITY Uacute "Ú">
    <!ENTITY Ucirc "Û">
    <!ENTITY agrave "à">
    <!ENTITY aacute "á">
    <!ENTITY acirc "â">
    <!ENTITY aelig "æ">
    <!ENTITY ccedil "ç">
    <!ENTITY egrave "è">
    <!ENTITY eacute "é">
    <!ENTITY ecirc "ê">
    <!ENTITY igrave "ì">
    <!ENTITY iacute "í">
    <!ENTITY icirc "î">
    <!ENTITY ograve "ò">
    <!ENTITY oacute "ó">
    <!ENTITY ocirc "ô">
    <!ENTITY ugrave "ù">
    <!ENTITY uacute "ú">
    <!ENTITY ucirc "û">
    <!ELEMENT users (user*)>
    <!ELEMENT user (name?, firstname?, phone?, mobile?, mail?)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT firstname (#PCDATA)>
    <!ELEMENT phone (#PCDATA)>
    <!ELEMENT mobile (#PCDATA)> 
    <!ELEMENT mail (#PCDATA)> 
    <!ATTLIST user id CDATA #REQUIRED>
    ]>
    <users>
    <user id="1">
    <name>GUILLARD</name>
    <firstname>Aur&eacute;lien</firstname>
    <phone>xxxxxxxxxx</phone>
    <mobile>xxxxxxxxxx</mobile>
    <mail>xxxxxxxxxx@gmail.com</mail>
    </user>
    </users>
    Source d'info :
    le w3c : http://www.w3.org/TR/REC-xml/#wf-entdeclared

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT 1.0] Tableau html pris sur un XML avec le bon dimensionnement
    Par GreatDeveloperOnizuka dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/06/2011, 10h45
  2. Création d'un HTML à partir d'un XML avec XSLT
    Par Ioan dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/03/2011, 18h51
  3. [HTML] streaming video *.rm marche avec FF pas avec IE
    Par gretch dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 24/10/2006, 15h05
  4. Réponses: 2
    Dernier message: 03/06/2005, 11h00
  5. Afficher du XML avec du HTML
    Par BipBip2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 05/04/2005, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo