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
    [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
    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().

###raw>template_hook.ano_emploi###