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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2005
    Messages : 44
    Points : 24
    Points
    24
    Par défaut [XML] Retrouver une valeur de balise selon la valeur d'un attribut de balise
    Bonjour,

    Je cherche à récupérer des valeurs contenue dans une balise en connaissant la valeur d'un de ses attributs.

    Mon fichier XML ressemble à ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <properties>
    	<entry key="type">for:ir</entry>
    	<entry key="aspects">rn:renditioned,sys:incomplete,cm:versionable,cm:titled,cm:auditable,sys:referenceable,sys:localized,cm:failedThumbnailSource,cm:author,chartres:note-interne</entry>
    	<entry key="cm:creator">anowak</entry>
    	<entry key="cm:autoVersion">true</entry>
    	<entry key="chartres:objet">test-objet</entry>
    	<entry key="cm:modifier">anowak</entry>
    	<entry key="sys:locale">fr_FR</entry>
    	<entry key="for:Nom">alain</entry>
    	<entry key="cm:modified">2018-06-04T03:22:46.596+02:00</entry>
    </properties>
    Je souhaite par exemple récupérer "for:ir", càd la valeur de la balise "entry" pour laquelle l'attribut "key" vaut "type"

    Je parviens à récupérer chaque key et value :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def alfFileProperties = new XmlParser().parseText(alfFileMdXML)
       alfFileProperties.'entry'.each { entry ->
       out << entry.@'key'
       out << entry.text()
    }
    Je parviens à récupérer la clé et valeur d'un entry spécifique dont je connais l'index

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def nameMD = alfFileProperties.'entry'[0]
    out << nameMD.@'key'
    out << nameMD.text()
    Me renvoie bien "type" et "for:it". Mais je n'ai pas la certitude que les balises seront toujours dans le même ordre d'un fichier XML à l'autre...


    Je ne parviens donc pas tout à fait à récupérer la valeur "for:ir" pour l'entry dont la key est "type". J'arrive plus ou moins à avoir la bonne entry avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def testMD = alfFileProperties.depthFirst().findAll { it.@'key' == 'type' }
    cela renvoie "[entry[attributes={key=type}; value=[for:ir]]] " mais je ne sais pas comment l'exploiter plus...

    Quelqu'un saurait-il m'aider ?
    Merci d'avance, bon week-end ! :-)

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    octobre 2011
    Messages
    1 367
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 367
    Points : 2 411
    Points
    2 411
    Par défaut
    Simplement comme ?
    Code groovy : Sélectionner tout - Visualiser dans une fenêtre à part
    def testMD=alfFileProperties.depthFirst().find{it.name()=='entry' && it.@key=='type'}
    Avec .findAll, ça peut se faire aussi, seulement il faut bouler avec .each().

Discussions similaires

  1. [AC-2007] Comptage dans une zone de liste selon les valeurs d'une colonne
    Par lakhdar16 dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/07/2012, 12h11
  2. Formulaire: Accessibilité à une balise selon la valeur d'une autre
    Par student_php dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/10/2010, 15h27
  3. Réponses: 5
    Dernier message: 29/01/2010, 15h22
  4. [XSLT] Selectionner une balise selon la valeur de son attribut
    Par Monkon dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 03/09/2009, 18h03
  5. Réponses: 4
    Dernier message: 24/07/2006, 18h34

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