Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/07/2015, à 18:14

galexis

Aide pour script sur fichier XML et CSV

Bonjour,
j'ai besoin d'extraire les données d'un fichier XML et de sauvegarder ces données dans un fichier CSV.
J'ai besoin d'extraire du fichier suivant (extrait de fichier):

<project title="" version="0.5" folioSheetQuantity="0">
             <element x="80" y="330" type="embed://import/bornes-cables/borne_simple.elmt" orientation="0" uuid="{697707f9-8748-4261-be66-76a5960819bb}">
                <terminals>
                    <terminal number="_" x="0" y="-6" orientation="0" id="1" nameHidden="0" name="_"/>
                    <terminal number="_" x="0" y="6" orientation="2" id="2" nameHidden="0" name="_"/>
                </terminals>
                <inputs>
                    <input x="-1" text="X3.6" y="3"/>
                </inputs>
                <elementInformations>
                    <elementInformation show="1" name="label">X3.6</elementInformation>
                </elementInformations>
            </element>
            <element x="730" y="330" type="embed://import/bornes-cables/borne_simple.elmt" orientation="0" uuid="{45da3bc2-fd5d-4b15-a5f9-a78483286769}">
                <terminals>
                    <terminal number="_" x="0" y="-6" orientation="0" id="3" nameHidden="0" name="_"/>
                    <terminal number="_" x="0" y="6" orientation="2" id="4" nameHidden="0" name="_"/>
                </terminals>
                <inputs>
                    <input x="-1" text="X4.2" y="3"/>
                </inputs>
                <elementInformations>
                    <elementInformation show="1" name="label">X4.2</elementInformation>
                </elementInformations>
            </element>

        <conductors>
            <conductor terminal1="0" displaytext="1" terminal2="24" onetextperfolio="0" x="0" num="_" y="0" horizrotatetext="0" type="multi" numsize="6" vertirotatetext="270"/>
            <conductor terminal1="26" displaytext="1" terminal2="19" onetextperfolio="0" x="0" num="123456789" y="0" horizrotatetext="0" type="multi" numsize="6" vertirotatetext="270"/>
            <conductor terminal1="30" displaytext="1" terminal2="15" onetextperfolio="0" x="0" num="02468" y="0" horizrotatetext="0" type="multi" numsize="6" vertirotatetext="270"/>
        </conductors>

données:
1: dans la section /project/diagram/elements/element: type (exemple: type="embed://import/bornes-cables/borne_simple.elmt")
2: dans la section /project/diagram/elements/element/elementInformations/elementInformations: name="label" (exemple: name="label">X4.2)
3: dans la section /project/diagram/elements/element/terminals/terminal: les idx2 (exemple: id="3")

je souhaite mettre les résultats en forme: donnée1;donnée2;donnée3.

Je bloque sur la récupération des données 2 id. Je fait:

xmlstarlet sel -T -t -m /project/diagram/elements/element -s D:N:- "elementInformations" -v "concat(elementInformations,'|',@type,'|',@id)" -n /le_fichier_xml.xml

exemple de résultat:

  X4.2
                |embed://import/bornes-cables/borne_simple.elmt|

je n'arrive pas à récupérer les numéro d'id.

Ensuite, je souhaite enregistrer tous les résultats dans un fichier csv, et là, j'ai beau chercher du côté de awk entre autre : pas de résultat.

Merci pour votre aide.
Cordialement.

Hors ligne

#2 Le 17/07/2015, à 11:50

galexis

Re : Aide pour script sur fichier XML et CSV

J'ai un peu avancé sur la commande xmlstarlet :

xmlstarlet sel -T -t -m /project/diagram/elements/element -s A:T:- "elementInformations" -v \
"concat(elementInformations/*[@name='label'],';',@type,';', terminal/@id)" -n le_fichier_xml.xml > fichier_csv.csv

le retour est;:

X4.2;embed://import/bornes-cables/borne_simple.elmt;

il manque encore les numéro de id. J'arrive à les récupérer séparément:

xmlstarlet sel -T -t -m /project/diagram/elements/element/terminals -s A:N:- "@id" -v "(terminal/@id)" -n le_fichier_xml.xml )

mais pas à le faire en même temps ...

Hors ligne