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

APIs XML Discussion :

MSXML -> Encodage d'un caractère spécial (œ)


Sujet :

APIs XML

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut MSXML -> Encodage d'un caractère spécial (œ)
    Bonjour à tous,

    Je crée dynamiquement un fichier XML avec Delphi et MsXml.
    Ca marche très bien, seulement il y a un caractère que je n'arrive pas à écrire.
    C'est le E dans O, le OE collé.
    En fait, si je fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    element := DOMDoc.createElement('test'); // Création du noeud
    element.text := 'Mon œuvre';
    node.appendChild(element);
    Il me restitue: "Mon ovre".

    Et si je met le code HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    element := DOMDoc.createElement('test'); // Création du noeud
    element.text := 'Mon œuvre';
    node.appendChild(element);
    Il me restitue: "Mon œuvre" (en fait, il a encodé le "&").

    Je suis en encoding "iso-8859-1".

    Je croit que j'ai tout essayé... Comment faire ?

    Merci d'avance.
    David.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 95
    Points : 133
    Points
    133
    Par défaut
    Bonjour,

    C'est pas la réponse directe mais je code personnellement ce eo en 339 et non 156

    Pour le pb en question, essayez de créer au préalble, comme le préconise le DOM, une référence entité équivalente à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    entite := DOMDoc.createEntityReference("eo")
    entite.text='& # 156;'
    ...
    element.text := 'Mon &eo;uvre';
    Je travaille pas sous delphi donc le code est incertain...

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour Oxedet,

    J'ai fait ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          DOMDoc.loadXML('<module/>');
          ref := DOMDoc.createEntityReference('œ');
          ref.text := 'œ';
          ref := DOMDoc.createEntityReference('Œ');
          ref.text := 'Œ';
          ...
    Il compile bien, mais lors de l'execution, il me met:
    "Tentative de modification d'un noeud en lecture seule."
    David.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 95
    Points : 133
    Points
    133
    Par défaut
    Bonjour David,

    De deux choses l'une :
    - le eo (version codée) ne peux servir de référence entité dans le DOM utilisé (ce qui est vraissemblable) donc il bug
    - et/ou le DOM est senssible à la casse pour les deux versions de eo et EO et ne supporte pas une redéfinition de l'entité (?)

    cela dit je ne sais de vos eo ceux qui sont codés ainsi (œ) dans votre code et ceux que ce gentil éditeur de texte de ce forum a codé après lui avoir saisi un & # 156 ; (j'ai mis des espaces pour ne pas qu'il me le convertisse)

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    J'ai testé en en mettant qu'une des 2 et j'ai le même message, ça ne vient donc pas de la redéfinition.

    J'ai vu qu'il était possible de faire, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          ref := DOMDoc.createEntityReference('nbsp');
          DOMDoc.DocumentElement.AppendChild(ref);
    Et je pouvais directement mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          element.text := 'Bonjour&nbsp;oxedet';
    De ce fait, je me disait que je pouvais faire la même chose pour mon cas de figure... Traiter la chaine avant de l'affecter à un noeud (remplacer les œ par le code HTML correspondant).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          ref := DOMDoc.createEntityReference('#156');
          DOMDoc.DocumentElement.AppendChild(ref);
          ...
          element.text := 'Mon & #156 ;uvre';
    Seulement, il me dit:
    Ce nom ne doit pas contenir le caractère '#'
    Et si j'enlève le #:
    Ce nom ne doit pas commencer avec le caractère '1'

    Je croit que ce n'est pas possible d'utiliser cette méthode pour ce cas de figure...
    David.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 95
    Points : 133
    Points
    133
    Par défaut
    Je reprends : j'aurais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ref := DOMDoc.createEntityReference('oe');
    ref.text='&#156;'    // attention valeur en & # 156 ;
    DOMDoc.DocumentElement.AppendChild(ref);
     ...
    element.text := 'Mon &oe;uvre';

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Non, rien à faire....
    Il me met toujours "Tentative de modification d'un noeud en lecture seule."

    En fait, il bloque sur la phrase: "ref.text...", il ne va même pas plus loin.

    Si je ne met pas cette instruction, ça passe, mais, dans le fichier XML créé, il ne met pas œ, mais o.
    Ca fait "...<module>&o;<PremierNoeud>...", exactement.
    David.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 95
    Points : 133
    Points
    133
    Par défaut
    effectivement, .text est en lecture seule (j'aurais du y penser)

    testez avec .nodeValue

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Ce n'est pas tellement mieux:
    "Cette opération ne peut pas être effectuée avec un type de noeud ENTITYREF."

    David.

Discussions similaires

  1. caractère spécial ...
    Par izbad dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 05/01/2006, 18h32
  2. [XML] caractères spécial
    Par nemya dans le forum Valider
    Réponses: 1
    Dernier message: 20/12/2005, 12h53
  3. Réponses: 2
    Dernier message: 06/11/2005, 11h11
  4. Pb masquer caractère spécial
    Par cosminutza dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 04/11/2004, 11h27

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