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 ! :-)