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 :

Récupérer les données d'un fichier XML


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Récupérer les données d'un fichier XML
    Bonjour,

    Je veux créer un fichier XML qui prendrait ces informations d'un autre fichier XML.

    Ceci a pour but de ne conserver que les informations importantes (supprimer les balises inutiles) et de rendre le code plus lisible par un humain (refactorisation des noms de balises)

    Le code en XML:
    Code XML : 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
    <?xml version="1.0"?>
    <window name="INCO_VEHICAL_DETAIL" page="FIRST" page-id="001">
        <table name="_TEMPLATE3" style="SYSTEM">
            <tbody>
                <tr row="1">
                    <tc cell="1">
                        <text name="_TEXT11" style="SYSTEM" lang="EN">
                        <p name="L">INCOTERM: <sym name="GV_INCOTERM">DAP/Dummy Location</sym></p>
                        <p name="L">Vehicle Plate:<sym name="GV_VEHICAL_PLATE">TEST_VEHICLE</sym></p>
                        <p name="L">Container ID :<sym name="GV_CONTAINER_ID">TEST_CONTAINER1</sym></p>
                        <p name="L"/>
                        </text>
                    </tc>
                    <tc cell="2">
                        <text name="_TEXT12" style="SYSTEM" lang="EN">
                        <p name="L">Seal No:<sym name="GV_SEAL_NO">TEST_SEAL_</sym></p>
                        <p name="L">TARE Weight:<sym name="GV_TARE_WEIGHT">TES</sym></p>
                        </text>
                    </tc>
                </tr>
            </tbody>
        </table>
    </window>

    Et je voudrais obtenir ceci :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <INCO_VEHICAL_DETAIL>
    	<_TEMPLATE3>
    		<_TEXT11>
    			<GV_INCOTERM>DAP/Dummy Location</GV_INCOTERM>
    			<GV_VEHICAL_PLATE>TEST_VEHICLE</GV_VEHICAL_PLATE>
    			<GV_CONTAINER_ID>TEST_CONTAINER1</GV_CONTAINER_ID>
    		</_TEXT11>
    		<_TEXT12>
    			<GV_SEAL_NO>TEST_SEAL_</GV_SEAL_NO>
    			<GV_TARE_WEIGHT>TES</GV_TARE_WEIGHT>
    		</_TEXT12>
    	</_TEMPLATE3>
    </INCO_VEHICAL_DETAIL>

    J'ai commencé à faire le script python ci-dessous mais j'ai un problème. Si je veux supprimer un élément (balise "p" par exemple ou encore "tc", "tr" etc...), cela supprimera l'élément enfant (sym) qui contient des données. Je suis un débutant en python et xml et je m'accroche à plusieurs jours malgré des heures de tutoriels ou de forums ...

    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
    import lxml.etree as xmlParser
    xmlDoc = xmlParser.parse('NewFile.xml')
    rootElement = xmlDoc.getroot()
     
     
    #refactor tag and delete attrib
    for element in rootElement.iter('window'):
        element.tag = element.attrib['name']
        element.attrib.pop('name')
        element.attrib.pop('page')
        element.attrib.pop('page-id')
     
    for element in rootElement.iter('table'):
        element.tag = element.attrib['name']
        element.attrib.pop('name')
        element.attrib.pop('style')   
     
    for element in rootElement.iter('text'):
        element.tag = element.attrib['name']
        element.attrib.pop('name')
        element.attrib.pop('style')
        element.attrib.pop('lang') 
     
    #for element in rootElement.iter('p'):
    #    rootElement.remove(element)
     
     
    for element in rootElement.iter('sym'):
        element.tag = element.attrib['name']
        element.attrib.pop('name')
     
     
    xmlDoc.write('out.xml')

    Ce qui donne le résultat :

    Code XML : 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
    <INCO_VEHICAL_DETAIL>
    	<_TEMPLATE3>
    		<tbody>
    			<tr row="1">
    				<tc cell="1">
    					<_TEXT11>
    						<p name="L">INCOTERM: <GV_INCOTERM>DAP/Dummy Location</GV_INCOTERM></p>
    						<p name="L">Vehicle Plate:<GV_VEHICAL_PLATE>TEST_VEHICLE</GV_VEHICAL_PLATE></p>
    						<p name="L">Container ID :<GV_CONTAINER_ID>TEST_CONTAINER1</GV_CONTAINER_ID></p>
    						<p name="L"/>
    					</_TEXT11>
    				</tc>
    				<tc cell="2">
    					<_TEXT12>
    						<p name="L">Seal No:<GV_SEAL_NO>TEST_SEAL_</GV_SEAL_NO></p>
    						<p name="L">TARE Weight:<GV_TARE_WEIGHT>TES</GV_TARE_WEIGHT></p>
    					</_TEXT12>
    				</tc>
    			</tr>
    		</tbody>
    	</_TEMPLATE3>
    </INCO_VEHICAL_DETAIL>


    Auriez vous des idées?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Epyon9 Voir le message
    Auriez vous des idées?
    Vous vous simplifieriez la vie en créant un nouveau fichier XML avec les données extraites plutôt que de modifier l'arborescence XML existante.

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

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    C'est en effet une solution que j'ai envisagé mais je ne vois pas comment extraire les données sans la structure :/

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai beau écumer les forums et les docs je n'arrive vraiment pas à trouver comment faire... Pourriez vous m'expliquer comment faire ou bien me donner quelques pistes?

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Epyon9 Voir le message
    Pourriez vous m'expliquer comment faire ou bien me donner quelques pistes?
    La première chose à faire est de parcourir l'arbre XML et vous assurer (avec de simples "print") que vous en sortez les données attendues/recherchées.

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

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Services de proximité

    Informations forums :
    Inscription : Juin 2019
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    N'est pas ce que je vois déjà avec le .write?

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Epyon9 Voir le message
    N'est pas ce que je vois déjà avec le .write?
    Le .write vous montre juste les changements faits dans la structure de l'arbre existant.
    Comme vous construisez une structure un peu différente, il faut quand même récupérer des informations dans les feuilles pour remplacer des éléments plus haut dans la hiérarchie.
    Ce qui revient à en construire un nouveau à partir des données extraites.
    Et comme c'est la partie la plus compliqué de votre arbre, autant le reconstruire à partir de zéro.

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

Discussions similaires

  1. [XML] Récupérer les données d'un fichier XML sur URL avec php
    Par ValooWart dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 01/03/2013, 16h40
  2. Récupérer les données d'un fichier XML
    Par anizlewan dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/07/2012, 18h33
  3. Récupérer les données d'un fichier image
    Par Jim_Nastiq dans le forum Bibliothèques
    Réponses: 12
    Dernier message: 24/01/2007, 14h22
  4. [DOM XML] Transfomer en variables les données d'un fichier xml
    Par rozdiwel dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 02/10/2006, 18h46
  5. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39

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