Utiliser XML avec MySQL 5.1 (part 4/5)
Les fonctionnalités XPath de MySQL 5
MySQL 5 offre la possibilité de pouvoir exécuter des requêtes XPath sur un flux XML, grâce à la fonction extractValue().
Le résultat récupéré est la concaténation de la valeur textuelle de chacun des nœuds trouvés (chaque valeur étant dissociée des autres par un espace blanc).
Comment récupérer la valeur de l’élément racine d’un flux XML ?
Extraire des données d’une variable contenant du XML
/*Contenu du fichier XML */
shell> cat formateur.xml
<opensource>
Les formateurs de l'équipe sont :
<formateur domaines="MySQL PHP">
<nom>Dasini</nom>
<prenom>Olivier</prenom>
</formateur>
<formateur domaines="PHP XML">
<nom>Allard</nom>
<prenom>Fabien</prenom>
</formateur>
<formateur domaines="Linux MySQL">
<nom>Dumont</nom>
<prenom>Pierre</prenom>
</formateur>
et sont passionnés par l'open source.
</opensource>
/* Initialisation de la variable @xml avec le contenu du fichier formateur.xml */
mysql> SET @xml = LOAD_FILE( './formateur .xml');
/* Récupération de la valeur de l’élément racine */
mysql> SELECT extractValue( @xml, '/opensource')\G
*************************** 1. row ***************************
extractValue( @xml, '/opensource'):
Les formateurs de l’équipe sont :
et sont passionnés par l’open source.
Comme vous pouvez le constater les éléments enfants de l’élément racine sont supprimés de la sélection : seul le contenu propre des éléments recherchés est donc intégré au résultat.
Autre exemple, on veut sélectionner le deuxième formateur de notre flux XML, ainsi que les formateurs qui ont pour domaine de compétence MySQL:
Extraire le deuxième formateur et les formateurs MySQL
mysql> SELECT extractValue( @xml, ‘/opensource/formateur[2]/nom’) AS Deuxieme, extractValue( @xml, ‘/opensource/formateur[contains( @domaines, « MySQL »)]/nom’) AS MySQL; +———-+—————+ | Deuxieme | MySQL | +———-+—————+ | Allard | Dasini Dumont | +———-+—————+
Comme vous avez pu le constater, XPath est également un langage d’interrogation. Examinons d’un peu plus près sa syntaxe.
Une expression XPath représente ce qui est appelé un chemin de localisation (très similaire au chemin permettant d’identifier un fichier) dans lequel chaque nœud est séparé des autres avec un /.
Généralement, la recherche s’effectue en fonction de deux types de nœuds distincts :
-
les nœuds éléments, renseignés par leur nom,
-
les attributs, indiqués par un @ accolé à leur nom.
Ainsi l’expression formateur/@domaines réfère l’attribut appelé domaines des éléments nommés formateur.
Pour pouvoir filtrer plus finement les éléments, XPath dispose des prédicats.
Chacun de ces prédicats est spécifié dans une paire de crochets [expression].
Une expression peut être soit une simple évaluation, soit utiliser une (ou plusieurs) fonction(s).
Par exemple formateur[@domaines= »Linux MySQL »][contains( nom, « Dumont »)]/prenom retrouve tous les prénoms des formateurs qui ont pour domaines Linux MySQL et qui possèdent un nom valant Dumont.
Les chemins de localisation utilisés peuvent être indiqués de façon absolue ou de façon relative. Dans ce deuxième cas, la recherche s’effectue en fonction du nœud contexte.
Dans l’expression précédente, l’attribut domaines testé est celui de l’élément formateur.
Enfin, il est possible de se déplacer dans l’arborescence (un . représente le nœud courant, et .. le nœud parent).
Ainsi formateur/prenom[../@domaines= »Linux MySQL »][contains( ../nom, « Dumont »)] est équivalente à l’expression précédente.
(à suivre… utiliser XML avec MySQL 5.1 : Extraire les données d’un flux XML stocké en base)
Architecte Solution Cloud chez Oracle
MySQL Geek, Architecte, DBA, Consultant, Formateur, Auteur, Blogueur et Conférencier.
—–
Blog: www.dasini.net/blog/en/
Twitter: https://twitter.com/freshdaz
SlideShare: www.slideshare.net/freshdaz
Youtube: https://www.youtube.com/channel/UC12TulyJsJZHoCmby3Nm3WQ
—–