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

Python Discussion :

[XML] prise en compte du caractère &


Sujet :

Python

  1. #1
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut [XML] prise en compte du caractère &
    Je bosse sur un fichier xml et j'ai besoin d'utiliser le caractère & (un logiciel externe traite ensuite ce fichier et doit comprendre ce caractère). Or, la norme (si j'ai bien compris) veut que ce caractère ne soit pas utilisé tel quel mais on doit écrire & à la place. Le problème, c'est que je dois absolument n'avoir que le &.
    Le problème, c'est que python me rajouter automatiquement le amp; lorsque j'insère le caractère & dans le fichier enregistré.

    Y-a-t-il un moyen d'éviter ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import xml.dom.minidom
     
    xmldoc = xml.dom.minidom.parse(xmlfile)
    elem = xmldoc.getElementsByTagName('elem')[0]
    elem.childNodes[0].nodeValue = "test1 & test2"
    xmldoc.writexml(open("toto.xml", "w"))

  2. #2
    Membre éclairé
    Avatar de airod
    Homme Profil pro
    Gérant Associé, DMP Santé et Directeur technique
    Inscrit en
    Août 2004
    Messages
    767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Gérant Associé, DMP Santé et Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 767
    Points : 891
    Points
    891
    Par défaut
    salut,
    as tu essayé de passer ton "&" en u"&" ou r"&"?

    je pense que tu y a pensé mais bon!

  3. #3
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Effectivement, j'avais essayé.
    Après quelques tests, si je lis la valeur de elem.childNodes[0].nodeValue, j'ai bien ce que je veux (quoiqu'il doit peut-être déjà faire l'interprétation à ce moment là). Par contre, au moment de la sauvegarde, il me rajoute le amp; (je suppose que la sauvegarde doit faire appel à la fonction toxml() qui présente le même souci)

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 149
    Points : 219
    Points
    219
    Par défaut
    la réponse simple est que "&" ou "<" sont des caractères illégaux dans xml car ils ont des fonctions propres : "&" seul génèrera une erreur car le traitement du xml s'attend à des entités pour utiliser les caractères spéciaux genre &amp;&lt; ou &#60;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    La méthode xml.dom.minidom.writexml fait appel à une fonction _write_data .

    Dans cette fonction il y a une gestion partielle de quelques entités :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def _write_data(writer, data):
        "Writes datachars to writer."
        data = data.replace("&", "&amp;").replace("<", "&lt;")
        data = data.replace("\"", "&quot;").replace(">", "&gt;")
        writer.write(data)
    Peut être en surchargeant la classe utilisant la fonction ?


    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    f = open("toto.xml","w")
    f.write(xmldoc.toxml().replace('&amp;','&'))
    f.close()

  6. #6
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    C'est effectivement la solution pour laquelle j'avais optée et qui, ma foi, convient très bien

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

Discussions similaires

  1. XML avec XSLT et CSS : la CSS n'est pas prise en compte -> ?
    Par souffle56 dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 03/05/2011, 00h03
  2. Modification d'un fichier xml non prise en compte
    Par guicecal dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/01/2009, 13h53
  3. fprintf prise en compte de caractères spéciaux
    Par youp_db dans le forum Windows
    Réponses: 1
    Dernier message: 12/02/2008, 14h53

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