Accueil > Documentation > Les balises XPX > GET

GET

La balise permet de fragmenter une chaine  en fonction de séparateurs ou de caractères spéciaux.

4 utilisations sont possibles selon le découpage souhaité:

  • <GET FORMAT> pour découper selon un format prédéfini simple avec séparateurs
  • <GET TOKEN> pour découper avec un ou plusieurs séparateur(s)
  • <GET TAG> pour découper des listes nom="value"
  • <GET REGEX> pour utiliser des expressions régulières

<get value="$val$" format="[separateur/variable]*">

Pour séparer une valeur en fonction de séparateurs connus, il faut utiliser l’attribut « format="séparateur/variable" ». Le découpage peut être effectué partiellement si le séparateur n'est pas trouvé.

Dans ce cas les variables non trouvées restent non définies.

L'attribut « value » vous permet d'indiquer la chaine de caractères que vous souhaitez découper.

<get format="$jour$/$mois$/$annee$" value="31/12/2011">
$annee$ prend alors la valeur 2011, $mois$ 03 et $jour$ 31.

<get format="$nom$@$compagnie" value="siteweb@infocosme">

$nom$ prend la valeur siteweb et $companie$ a pour valeur infocosme.

<get value="val" token="[separateur]*" name="result" [option="null | notnull"]>

Pour fragmenter une string en un nombre de fragments dépendants de l’apparition des caractères séparateurs utilisez l'attribut « token="liste_des_caractères" ».

Vous pouvez aussi utiliser l’attribut « option="null/notnull" » pour préciser si vous voulez compter ou non les chaines vides (quand deux éléments séparateurs sont l’un à coté de l’autre). La valeur "null" prend en compte les chaines vides et la valeur "notnull’ ne les compte  pas. Si option n'est pas précisé, la valeur par défaut est null.

L'attribut « "name" » vous permet de placer les fragments, obtenus par la découpe, dans une variable. Le premier fragment est ainsi obtenu dans la variable : $nom1$, le deuxième dans $nom2$ et ainsi de suite. La variable $nom$ (et $nom.count$) contient le nombre de fragments.

<get value="2011/03/15 12:46" token="/ :">
Génère les variables suivantes :

$date$ => 5 (nombre de valeurs)
$date.count$ => 5 (nombre de valeurs)

$date1$ => 2011 (valeur du premier fragment)
$date2$ =>03 (valeur du second fragment)
…
$date5$ =>46 (valeur du cinquième fragment)

<get tag="...">

Permet de définir comme variables les valeurs définies dans la chaîne au format :

nom1="valeur1" [nom2="valeur2...]

Cette balise est utile notamment dans le cadre de lecture de fichiers XML (balises XPROC et XPATH), pour récupérer les attributs attachés à une balise XML.

<get tag="val1=12345 val2=56789"> 

2 variables seront définies : val1 => 12345 val2 => 56789


Exemple avec balise XPROC :

   <xproc file="$pathSVG$"><!-- Récupération du paramétrage du SVG -->
     <cond expr="$xproc.name$ = svg">
       <get tag="$xproc.attributes$">

<get regex="..." name="..." value="...">

À partir de la version 4.021a-30, l'attribut regex permet de fournir une expression régulière (du type PCRE2) qui sera utilisée pour parser la valeur passée dans value.

Le champ name permet de nommer les variables résultats (ce sont les pattern entre parenthèses de l'expression régulière), comme dans <get token="...">. Les patterns de recherchent peuvent également être nommés (voir exemple avec date ci-dessous), auquel cas, ces noms de variables seront également affectés.

ATTENTION : dans cette version, un seul match est réalisé, il pas d'équivalent de l'option /g.

La documentation complète de la norme est ici. Le site regex101 permet de tester facilement les expressions régulières (il est par défaut en PCRE2)

Les principaux éléments de recherche dans les expressions régulières PCRE2 sont :

     any character
  \d any decimal digit
  \D any character that is not a decimal digit
  \s any white space character
  \S any character that is not a white space character
  \w any "word" character
  \W any "non-word" character
  \b word boundary
  \B not a word boundary
  \o{ddd..} character with octal code ddd..
  \xhh character with hex code hh
  \x{hhh..} character with hex code hhh.
  \N{U+hhh..} character with Unicode hex code point hhh..
(Unicode mode only)
  ...  D'autres possibilités existent

 
À cela s'ajoutent des suffixes précisant le nombre d'occurrences :

    * 0 à n éléments
  + 1 à n éléments
  ? 0 ou 1 éléments
  {n} pour exactement n éléments
  {n,m} au moins n, pas plus que m
  ...  Il y a des combinaisons de ces suffixes


Ainsi que les classes de caractères :

    [...] positive character class
  [^...] negative character class
  [x-y] range
  [[:xxx:]] positive POSIX named set
  [[:^xxx:]] negative POSIX named set
     
  POSIX named set  
  alnum alphanumeric
  alpha alphabetic
  ascii Code between 0 and 127
  blank space or tab
  cntrl control character
  digit decimal digit
  graph printing, excluding space
  lower lower case letter
  print printing, including space
  punct printing, excluding alphanumeric
  space white space
  upper upper case letter
  word same as \w
  xdigit hexadecimal digit


 Un résumé complet de ces éléments est disponible ici.

Contrôle d'un entier :
<get name="entier" value="12abc" regex="(\d+)">

Donnera entier.count=1 et entier1=12, le reste de la valeur est ignoré. Pour accepter les entiers négatifs, on peut utiliser (-?\d+).
Contrôler une adresse IP :
<get name="ipAdr" value="192.168.72.13" regex="(\d+)\.(\d+)\.(\d+)\.(\d+)">

Donnera ipAdr.count=4 et ipAdr1=192, ipAdr2=168, ipAdr3=72, ipAdr4=13
Contrôler une date au format dd/mm/yyyy :
<get name="date" value="31/12/2025" regex="^\s*(?<jour>\d{2})\/(?<mois>\d{2})\/(?<annee>\d{4})\s*$">

Donnera date.count=3 et date1=31, date2=12, date3=2025 Mais aussi jour=31, mois=12, annee=2025

 

Pour gérer correctement les chaînes UTF-8, il faut préfixer les expressions régulières avec (*UTF) et/ou (*UCP). Voir exemple, dans l'image ci-dessous

Télécharger

Téléchargez rapidement la dernière version du XPX: Version 3.8-rc16 - 05/02/2019

FAQ

Venez nous poser vos questions et voir les problèmes courants que vous pouvez rencontrer

Don

Aidez-nous à faire vivre ce site en faisant un don

Condition d'utilisation