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 :

modifier une balise text dans un xml [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut modifier une balise text dans un xml
    Bonjour,

    Je sais que je ne suis pas très loin, mais je n'y arrive pas! (je suis débutant en python )

    Je traduis des lignes de textes et je voudrai remplacer le texte original par ce lui de la traduction. J'arrive à créer un autre fichier que le fichier original, mais je n'arrive pas à modifier exactement la balise text.

    Voilà ce que j'obtiens... c'est pas très beau!
    <string_table>

    <string id="pri_monol_agent_task_desc0">Le monolithe de reconnaissance, a rapidement été blessé pendant notre sortie avec lui. L'artefact "Svetlyak" l'aidera à récupérer davantage.<text>Монолитовец-разведчик Быстрый получил ранение во время нашей с ним вылазки. Артефакт "Светляк" поможет ему скорее выздороветь.</text>
    </string>
    Voilà mon code modifié par rapport au résultat ci-dessus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import xml.etree.ElementTree as et
    import translators as ts
     
    my_tree = et.parse('classeur1_test.xml')
    my_root = my_tree.getroot()
     
    for string in my_root.findall('string'):
      texte = string.find('text').text
      texteT = ts.google(texte, from_language='ru', to_language='fr')
      text.text = str(texteT)
      print(texteT)
     
    my_tree.write('output.xml')
    et le message d'erreur correspondant à ce code:
    C:\py4e>mapping3-xml.py
    Using state Provence-Alpes-Côte d'Azur server backend.
    Traceback (most recent call last):
    File "C:\py4e\mapping3-xml.py", line 13, in <module>
    text.text = str(texteT)
    NameError: name 'text' is not defined. Did you mean: 'texte'?
    Merci pour votre aide

    Tremens

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par tremens Voir le message
    Je sais que je ne suis pas très loin, mais je n'y arrive pas! (je suis débutant en python )

    Essayez de comprendre ce que dit "NameError: name 'text' is not defined. Did you mean: 'texte'?" et remerciez les anciens pour le temps passé en discussion et en codage pour avoir des messages qui aident à trouver facilement la cause (de l'erreur).

    Pour en profiter, il faut avoir pris le temps de faire ses premiers pas avec un tuto. plutôt que de partir à vouloir coder de petits projets sans avoir cherché à comprendre (on ne sort pas d'un tuto sans avoir compris NameError!).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Salut,

    J'aurais plutôt utilisé iter() et également préciser l'encodage à l'écriture du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my_tree = et.parse('classeur1_test.xml')
    my_root = my_tree.getroot()
     
    for elt in my_root.iter('text'):
    	text_trad = ts.google(elt.text, from_language='ru', to_language='fr')
    	elt.text = text_trad
     
    my_tree.write('output.xml', encoding="utf-8")

  4. #4
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Citation Envoyé par Diablo76 Voir le message
    Salut,

    J'aurais plutôt utilisé iter() et également préciser l'encodage à l'écriture du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    my_tree = et.parse('classeur1_test.xml')
    my_root = my_tree.getroot()
     
    for elt in my_root.iter('text'):
    	text_trad = ts.google(elt.text, from_language='ru', to_language='fr')
    	elt.text = text_trad
     
    my_tree.write('output.xml', encoding="utf-8")
    Oui ton code fonctionne, mais je veux comprendre pourquoi mon code initial n'a pas fonctionné. Franchement la doc de ElementTree n'est pas évidente. Je te remercie pour ton code, je vais approfondir le sujet

    j'avais mis texte dans mon code précédent et il m'avait retourné l'erreur.
    texte.text = str(texteT)
    AttributeError: 'str' object has no attribute 'text'
    Si j'ai bien compris, il lui manquait une ref pour remplacer le texte brute par celui traduit. J'ai eu beau chercher, c'est pas évident de trouver la solution.

    Tremens

  5. #5
    Membre actif
    Homme Profil pro
    Animateur Numérique
    Inscrit en
    Février 2013
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Animateur Numérique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2013
    Messages : 143
    Par défaut
    Citation Envoyé par tremens Voir le message
    Oui ton code fonctionne, mais je veux comprendre pourquoi mon code initial n'a pas fonctionné. Franchement la doc de ElementTree n'est pas évidente. Je te remercie pour ton code, je vais approfondir le sujet

    j'avais mis texte dans mon code précédent et il m'avait retourné l'erreur.

    Si j'ai bien compris, il lui manquait une ref pour remplacer le texte brute par celui traduit. J'ai eu beau chercher, c'est pas évident de trouver la solution.

    Tremens
    Tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    elt = my_root.find('text')
    texteT = ts.google(elt.text, from_language='ru', to_language='fr')
    elt.text = str(texteT)
    print(texteT)

  6. #6
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Janvier 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2010
    Messages : 73
    Par défaut
    Citation Envoyé par Diablo76 Voir le message
    Tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for string in my_root.findall('string'):
      elt = string.find('text')
      texteT = ts.google(elt.text, from_language='ru', to_language='fr')
      elt.text = str(texteT)
      print(texteT)
    Ne fonctionne pas car elt = string.findall('string') ne retourne pas du str mais <class 'xml.etree.ElementTree.Element'>

    Je l'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    import xml.etree.ElementTree as et
    import translators as ts
     
    my_tree = et.parse('Classeur1-atrduire.xml')
    my_root = my_tree.getroot()
     
    for string in my_root.findall('string'):
      texte = string.find('text').text
      texteT = ts.google(texte, from_language='ru', to_language='fr')
      texte.text = str(texteT)
      print(texteT)
     
    my_tree.write('output.xml')
    j'ai eu en retour
    C:\py4e>mapping3-xml.py
    Using state Provence-Alpes-Côte d'Azur server backend.
    Traceback (most recent call last):
    File "C:\py4e\mapping3-xml.py", line 13, in <module>
    texte.text = str(texteT)
    AttributeError: 'str' object has no attribute 'text'
    Merci Diablo76 pour ton aide

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

Discussions similaires

  1. [SimpleXML] Compter le nombre de fois ou une balise apparait dans un fichier xml.
    Par Krabbos dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/06/2011, 12h20
  2. [HTML][Firefox] Attribut maxlenght dans une balise Text
    Par charlot44 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/07/2005, 09h34
  3. [XSL] Balise html dans un XML
    Par Ludo_xml dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 13/06/2005, 13h55
  4. Comment modifier une page affichée dans un TWebBrowser ?
    Par dreamincoco dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/03/2005, 14h07
  5. [IO]Récupérer une chaine texte dans un flux HTTP
    Par elitost dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/03/2005, 10h39

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