5
(1)

Rôle

La fonction FILTRE.XML permet d'extraire des données spécifiques d'une chaîne XML en renvoyant une matrice de résultats.

Il y a quelques exemples dans l'article Exploiter des données d'Internet avec la fonction SERVICEWEB 1.

Pour des informations sur le XML

Syntaxe

= FILTRE.XML( Xml ; XPath )
  • Xml : Chaîne au format XML.
  • XPath : Chaîne au format XPath standard (langage de requête).

Utilisation pour faire fractionner une chaîne

L'astuce est de maquiller la chaîne de texte en chaîne XML puis d'utiliser le bon XPath pour extraire la partie ciblée.

Exemple 1 : Toutes les occurrences

Fractionner la chaîne de la cellule B2 ("a/bbb/cccc/dd") au niveau des /.

=FILTRE.XML( "<root><node>" & SUBSTITUE(B2 ; "/" ; "</node><node>") & "</node></root>" ; "//node" )
  • On ajoute le préfixe <root><node> (ou <r><n> si on veut) qui ouvre la chaîne XML (racine) et ouvre le 1er nœud.
  • On remplace le séparateur par </node><node> fermant et ouvrant un nœud.
  • On termine la chaîne par </node></root> en fermant le dernier nœud et en fermant la chaîne XML.

On obtient pour l'argument Xml la chaîne suivante :

<root><node>a</node><node>bbb</node><node>cccc</node><node>dd</node></root>

On indique dans XPath que l'on veut extraire tous les nœuds <node> : //node

Fonction FILTRE.XML pour fractionner une chaîne
Fonction FILTRE.XML pour fractionner une chaîne

Alternative

Il existe maintenant la fonction FRACTIONNER.TEXTE pour obtenir ce résultat.

= FRACTIONNER.TEXTE( B2 ; ; "/" )

Exemple 2 : Une occurrence en se basant sur sa position

On cherche la 3eme valeur (=>cccc).

= INDEX(FILTRE.XML("<root><node>" & SUBSTITUE(B2;"/";"</node><node>") & "</node></root>";"//node");3)

Alternative

= INDEX(FRACTIONNER.TEXTE(B2;"/");3)

Exemple 3 : Une occurrence en se basant sur son prédécesseur

La chaîne en B2 est "Lundi/1/Mardi/10/Mercredi/100".

On cherche la valeur de Mardi (celle qui suit Mardi =>10).

=FILTRE.XML("<root><node>" & SUBSTITUE(B2;"/";"</node><node>") &
            "</node></root>";"/root/node[text()='Mardi']/following-sibling::node[1]")

Alternative

=LET(Tab;FRACTIONNER.TEXTE(E14;"/");
     INDEX(Tab ; EQUIV("Mardi";Tab;0) + 1)) * 1

LET => On définit un nom Tab contenant la matrice des valeurs.
EQUIV => On récupère la position de Mardi dans Tab.
INDEX => On prend la valeur suivante (EQUIV()+1).

Le *1 est pour convertir la valeur en numérique.

Exemple 4 : La valeur d'un attribut

La chaîne en B2 est "<value code="OTAN" label="Organisation du traité de l'Atlantique Nord" labelEN="NATO" rank="9684"/>"

On cherche les valeurs des attributs label (=>Organisation du traité...) et rank (=>9684).

=FILTRE.XML(B2 ; "/value/@label")
=FILTRE.XML(B2 ; "/value/@rank")

Alternative

=INDEX(FRACTIONNER.TEXTE(B2;"""");4)
=INDEX(FRACTIONNER.TEXTE(B2;"""");8)

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 5 / 5. Nombre de votes : 1

Aucun vote pour l'instant ! Soyez le premier à noter ce post.

Nous sommes désolés que cet article ne vous ait pas été utile !

Améliorons cet article !

Dites nous comment nous pouvons améliorer cet article ?

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *