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 :

Ecriture XML avec variable


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur SIG
    Inscrit en
    Juillet 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur SIG
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2023
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Ecriture XML avec variable
    Bonjour,

    J'ai à ma disposition une liste de plusieurs dictionnaires contenant à chaque fois une paire
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {"attrib":""Format","valeur":"PDF"}
    {"attrib":""Orientation","valeur":"Portait"}
    etc ...

    Dans mon script python qui edite du XML, je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    nouveau = ET.SubElement(traces, "Trace")
       for elem in liste_attrib:
          att = elem["attrib"]
          val = elem["valeur"]
          nouveau.set(att,val)
    A la fermeture de mon XML, j'ai une erreur
    J'ai identifié l'endroit.
    val est bien pris en compte (si je fais : nouveau.set("monAttrib",val) pas de problème)
    c'est au niveau de att, pourtant att contient bien un valeur correcte


    Avez-vous une idée ?
    Faut-il reformater att ?

    Merci de votre réponse et bonne journée

    PYJ

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Salut,

    Vous ne fournissez pas de quoi reproduire le problème et si on essaie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> import xml.etree.ElementTree as et
    >>> a = et.Element('a')
    >>> b = et.SubElement(a, 'b')
    >>> att = 'xxx'
    >>> val = 'zzz'
    >>> b.set(att, val)
    >>> et.dump(a)
    <a><b xxx="zzz" /></a>
    >>>
    ça fonctionne très bien avec des variables...

    - W

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur SIG
    Inscrit en
    Juillet 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur SIG
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2023
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Re,
    Si je fais comme toi, c'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> att = 'xxx'
    >>> val = 'zzz'
    >>> b.set(att, val)
    Alors ça fonctionne

    Par contre si je vais chercher att et val dans la liste, ce n'est toujours pas bon


    Voici le contenu de ma liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{'attrib': 'Ident', 'valeur': 'DETAIL_ZONAGE_P_OFFICIEL¤Q_CALUIRE_ET_CUIRE'}, {'attrib': 'Typeplan', 'valeur': 'DETAIL_ZONAGE_P_OFFICIEL'}, {'attrib': 'Zonegeo', 'valeur': 'Q_CALUIRE_ET_CUIRE'}, {'attrib': 'TCodeCahier', 'valeur': '11'}, {'attrib': 'TEchelle', 'valeur': '2000'}, {'attrib': 'TNature', 'valeur': 'OFFICIEL'}, {'attrib': 'TRendu', 'valeur': 'Couleur'}, {'attrib': 'TLibelle1', 'valeur': 'DOCUMENT GRAPHIQUE DU REGLEMENT'}, {'attrib': 'T_Libelle2', 'valeur': None}, {'attrib': 'ZNom', 'valeur': 'Q_CALUIRE_ET_CUIRE'}, {'attrib': 'ZLibelle1', 'valeur': 'CALUIRE-ET-CUIRE'}, {'attrib': 'ZLibelle2', 'valeur': 'NULL'}, {'attrib': 'ZLargPapier', 'valeur': '96000'}, {'attrib': 'ZHautPapier', 'valeur': '59400'}, {'attrib': 'ZOrientation', 'valeur': 'PAY'}, {'attrib': 'ZCartouche', 'valeur': 'BDV,0'}, {'attrib': 'ZEchelle', 'valeur': '2000'}, {'attrib': 'ZCalage', 'valeur': 'N'}, {'attrib': 'ZMisePage', 'valeur': '3'}, {'attrib': 'ZFormatDest', 'valeur': 'PDF'}]
    Merci

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par pyjoubert Voir le message
    Par contre si je vais chercher att et val dans la liste, ce n'est toujours pas bon
    Alors montre-nous comment tu vas chercher att et val dans la liste...

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur SIG
    Inscrit en
    Juillet 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur SIG
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2023
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Re,

    Comme je l’ai précisé dans mon premier post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for elem in liste_attrib:
          att = elem["attrib"]
          val = elem["valeur"]
          nouveau.set(att,val)
    J'ai testé en mettant des print, et je récupère bien mes att et val

    PYJ

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 735
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 735
    Points : 31 060
    Points
    31 060
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pyjoubert Voir le message
    J'ai testé en mettant des print, et je récupère bien mes att et val
    Alors cela ne vient pas de là. Donc quand ça fonctionne avec l'exemple de wiztricks c'est que ça fonctionne avec "une" valeur, ce qui est différent de ton cas où tu as "n" valeurs...

    Accessoirement as-tu remarqué la différence entre les posts de ceux qui postent leurs codes proprement et les tiens? Ton premier post a été réécrit par un modo, tu devrais essayer de percuter un peu...

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par pyjoubert Voir le message
    Par contre si je vais chercher att et val dans la liste, ce n'est toujours pas bon
    Si et.dump plante, il affichera un message d'erreur qui dit ce qui ne va pas.

    Normalement, après avoir passé un peu de temps à essayer de faire des exercices en apprenant les bases, vous devriez connaître l'importance de ces messages là pour comprendre ce qu'il faut corriger.
    A défaut, vous ne prenez même pas la peine de le poster... normal de demander de l'aide, mais vous le faites dans un forum où vous êtes supposé avoir pris le temps d'apprendre les bases avant (de demander de l'aide)! Et vous ne demandez pas de l'aide pour comprendre comment faire un exo...

    note: un peu de jujotte aussi: si les paramètres doivent être des strings, s'ils sont autres, ça plante (et il y en a dans votre liste).

    - W

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur SIG
    Inscrit en
    Juillet 2023
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur SIG
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2023
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Désolé pour la balise "code",

    Il me fallait urgemment de l'aide et c'est vrai que je n'ai pas consulté les règles du forum auparavant.
    Désormais, je ferai mieux la prochaine fois ;-)

    Concernant mon problème, il est résolu (c’était une faute d'orthographe sur un attribut XML (T_Libelle2 au lieur de TLibelle2)

    Merci encore de votre aide et bonne journée

    PYJ

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 426
    Points : 37 008
    Points
    37 008
    Par défaut
    Citation Envoyé par pyjoubert Voir le message
    Concernant mon problème, il est résolu (c’était une faute d'orthographe sur un attribut XML (T_Libelle2 au lieur de TLibelle2)
    Pas du tout, les _ sont acceptés. Par contre, dans la liste postée on trouve le dictionnaire: {'attrib': 'T_Libelle2', 'valeur': None} et c'est ce None qui fait planter le dump:
    Voir ligne 27
    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
    >>> b = et.SubElement(a, 'b')
    >>> et.dump(b)
    <b />
    >>> b.set('T_Libelle2', None)
    >>> et.dump(b)
    Traceback (most recent call last):
      File "C:\py_env\py_3.11\Lib\xml\etree\ElementTree.py", line 1041, in _escape_attrib
        if "&" in text:
           ^^^^^^^^^^^
    TypeError: argument of type 'NoneType' is not iterable
     
    During handling of the above exception, another exception occurred:
     
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "C:\py_env\py_3.11\Lib\xml\etree\ElementTree.py", line 1148, in dump
        elem.write(sys.stdout, encoding="unicode")
      File "C:\py_env\py_3.11\Lib\xml\etree\ElementTree.py", line 743, in write
        serialize(write, self._root, qnames, namespaces,
      File "C:\py_env\py_3.11\Lib\xml\etree\ElementTree.py", line 899, in _serialize_xml
        v = _escape_attrib(v)
            ^^^^^^^^^^^^^^^^^
      File "C:\py_env\py_3.11\Lib\xml\etree\ElementTree.py", line 1064, in _escape_attrib
        _raise_serialization_error(text)
      File "C:\py_env\py_3.11\Lib\xml\etree\ElementTree.py", line 1018, in _raise_serialization_error
        raise TypeError(
    TypeError: cannot serialize None (type NoneType)
    >>>
    Citation Envoyé par pyjoubert Voir le message
    Il me fallait urgemment de l'aide
    Vous fabriquez des théories fausses qui ne vont pas vous aider à progresser. Prenez le temps d'apprendre et d'aborder les problèmes rencontrés avec plus de rigueur sinon vous allez obtenir des résultats discutables (puisque vous ne savez pas pourquoi ça fonctionne ni comment ils sont construits) et des tas de mauvaises habitudes dont il sera difficile de vous défaire.

    - W

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

Discussions similaires

  1. [XL-2007] Ecriture somme avec cellule variable
    Par toushusss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/06/2011, 12h22
  2. Parser XML avec URL variable
    Par cadeau10 dans le forum Android
    Réponses: 3
    Dernier message: 25/05/2011, 09h45
  3. creer XML avec variable de session
    Par voyageurdumonde dans le forum Langage
    Réponses: 2
    Dernier message: 17/02/2011, 19h37
  4. [DOM] Parser un fichier xml avec mise à jour variable
    Par toussef dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 20/01/2010, 12h48
  5. Lecture Ecriture XML avec données unicode
    Par Rupella dans le forum Général Python
    Réponses: 3
    Dernier message: 15/09/2009, 13h30

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