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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du 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
    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
    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
    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
    Futur Membre du 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
    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
    Futur Membre du 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
    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
    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
    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
    Futur Membre du 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
    Par défaut
    N'est pas ce que je vois déjà avec le .write?

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