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

Shell et commandes GNU Discussion :

Récupération des valeurs d'un fichier XML à l'aide de xmllint


Sujet :

Shell et commandes GNU

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Récupération des valeurs d'un fichier XML à l'aide de xmllint
    Bonjour à tous,


    Je suis débutante en linux et xml donc je suis désolée si mes questions sont peut-être un peu bêtes... Seulement je tourne depuis plusieurs jours en faisant des tests et en recherchant des questions similaires sur les forums sans trouver grand chose de compréhensible...

    Je travaille actuellement sur un script bash qui cherche, entre autre, à stocker dans des variables quelques valeurs d'un fichier XML. Le script utilise la commande xmllint qui répond parfaitement à nos attentes pour les cas simples. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    root@geo:~# titre=$(xmllint --xpath "/metadata/dataIdInfo/idCitation/resTitle/text()" /home/geo/owncloud/geosync_data_tests/clement_data/GPS/Point_ge.shp.xml)
    root@geo:~# echo $titre
    Fiche des Points GPS
    Néanmoins, je n'arrive pas à utiliser la même fonction lorsque des namespaces sont nécessaires. J'essaye pour cela d'utiliser l'option dtdattr de la commande xmllint mais je n'arrive pas à trouver comment la configurer (même avec un seul préfixe, alors qu'il faudra que je travaille avec deux préfixes au minimum). Je tente de la configurer comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    root@geo:~# xmllint --dtdattr "gmd=http://www.isotc211.org/2005/gmd/gmd.xsd" --xpath "/gmd:MD_Metadata/gmd:characterSet/gmd:MD_CharacterSetCode" /home/geo/owncloud/baies_metadata/baies_metadata.shp.xml
    warning: failed to load external entity "gmd=http://www.isotc211.org/2005/gmd/gmd.xsd"
    XPath error : Undefined namespace prefix
    xmlXPathEval: evaluation failed
    XPath evaluation failure

    Auriez-vous une piste pour m'aider à avancer ?

    Merci d'avance !

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Le message d'erreur est clair. Il n'arrive pas à charger un fichier qui s'appellerait "gmd=ht..." et on le comprend. Supprime "gmd=".
    Et encore, pas sûr qu'il soit capable de se servir d'un fichier distant. Peut-être faudra-t-il le rapatrier avant de l'utiliser.

    J'imagine que gmd doit être défini dans ton fichier.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci Flodelarab pour cette réponse ultra-rapide

    Effectivement, mon fichier xml, produit par un logiciel, débute bien par une déclaration du gmd utilisé :
    Nom : gmd.png
Affichages : 1095
Taille : 103,5 Ko

    Si j'enlève le "gmd=" dans la l'option dtdattr, tu as raison, ça marche mieux : il n'y a plus d'erreur mais je n'arrive toujours pas à ce que je souhaite ! La commande lance en effet le shell de navigation (je ne suis pas sûre que c'est de ça dont il s'agit...) de la commande xmllint :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    root@sophie:~# titre=$(xmllint --dtdattr "http://www.isotc211.org/2005/gmd" --xpath "/gmd:MD_Metadata/gmd:characterSet/gmd:MD_CharacterSetCode" /home/owncloud/baies_metadata/baies_metadata.shp.xml")
    > 
    >

    La semaine dernière, j'ai testé l'utilisation du shell de xmmlint (accessible via l'option du même nom) et arrivais bien accéder à mes données mais je souhaiterais accéder aux données en une seule ligne de commande pour le script.

  4. #4
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Hum. Si le shell continue sur l'autre ligne, c'est que tu as 5 guillemets dans ta commande ... il veut voir la fin.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Hum. Si le shell continue sur l'autre ligne, c'est que tu as 5 guillemets dans ta commande ... il veut voir la fin.
    Autrement dit, il manque un guillemet devant: /home/owncloud/baies_metadata/baies_metadata.shp.xml

    D'ailleurs, les couleurs d'affichage de la page dans développez.net peuvent nous mettre la puce à l'oreille (merci à l'armée de petites mains qui rajoutent les couleurs en douce pour faire pluzoli!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    root@sophie:~# titre=$(xmllint --dtdattr "http://www.isotc211.org/2005/gmd" --xpath "/gmd:MD_Metadata/gmd:characterSet/gmd:MD_CharacterSetCode" "/home/owncloud/baies_metadata/baies_metadata.shp.xml")

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour à vous deux,

    je vous remercie de vos réponses : j'ai tenté d'écrire de réponse mais il y a eu des petits cafouillages dans l'envoi et ils n'apparaissent pas.

    J'ai finalement trouvé la solution à mon problème en effectuant la manip suivante :

    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
    # Fonction récupérant l'élément de l'attribut désigné dans pathx
    get_xml_value() {
    filexml=$1
    setns1=$2
    setns2=$3
    pathx='xpath string('$4')'
    xmllint --xinclude --shell $filexml <<TEST_CMD
    $setns1
    $setns2
    $pathx
    TEST_CMD
    }
     
    # Instanciation des paramètres
    path_xml='/home/georchestra-ouvert/owncloudsync/baies_metadata/baies_metadata.shp.xml'
    path_setns1='setns gmd=http://www.isotc211.org/2005/gmd'
    path_setns2='setns gco=http://www.isotc211.org/2005/gco'
    path_title='/gmd:MD_Metadata/gmd:identificationInfo/gmd:MD_DataIdentification/gmd:citation/gmd:CI_Citation/gmd:title/gco:CharacterString'
     
    # Appel de la fonction et envoi des paramètres
    title=`get_xml_value $path_xml $path_setns1 $path_setns2 $path_title`
    Merci de votre aide !

    Sophie.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par Socratee Voir le message
    J'ai finalement trouvé la solution à mon problème en effectuant la manip suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    # Appel de la fonction et envoi des paramètres
    title=`get_xml_value $path_xml $path_setns1 $path_setns2 $path_title`
    Le jour où ton script sera utilisé sur un répertoire dont le nom contient une espace (ça arrive parfois!), il faudra penser à mettre des guillemets autour des variables:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    title=`get_xml_value "$path_xml" "$path_setns1" "$path_setns2" "$path_title"`

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

Discussions similaires

  1. [A-02] Récupération des attributs d'un fichier xml
    Par kizou dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/03/2009, 12h31
  2. récupération des données d'un fichier xml ?
    Par sarapis dans le forum Flex
    Réponses: 2
    Dernier message: 10/02/2009, 11h40
  3. [JDOM] recupérer des valeurs d'un fichier xml
    Par legendaire dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 05/02/2008, 16h21
  4. [crystal XI]Mise a jour des valeurs d'un fichier xml
    Par xxxcapxxx dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 31/08/2007, 11h21
  5. Récupération des éléments d'un fichier xml en flux retour
    Par opeo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/11/2005, 10h33

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