Link Search Menu Expand Document

TP - des expressions XPath dans un répertoire

Après l’apprentissage de l’API DOM sans une réelle pratique, il est temps de corriger le tir ! Ce nouveau TP sera donc l’occasion d’écrire plusieurs expressions XPath destinées à extraire les informations d’un répertoire contenu dans un document XML.

Bon courage ! 😉

L’énoncé

Le document XML

Une fois de plus, c’est avec un répertoire téléphonique que nous allons travailler.

Voici les informations que l’on connaît pour chaque personne :

  • Son sexe (homme ou femme).
  • Son nom.
  • Son prénom.
  • Son adresse.
  • Un ou plusieurs numéros de téléphone (téléphone portable, fixe, bureau, etc.).
  • Aucune ou plusieurs adresses e-mail (adresse personnelle, professionnelle, etc.).

Voici maintenant le document XML qui va nous servir de support :

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<repertoire>
  <!-- John DOE -->
  <personne sexe="masculin">
    <nom>DOE</nom>
    <prenom>John</prenom>
    <adresse>
      <numero>7</numero>
      <voie type="impasse">impasse du chemin</voie>
      <codePostal>75015</codePostal>
      <ville>PARIS</ville>
      <pays>FRANCE</pays>
    </adresse>
    <telephones>
      <telephone type="fixe">01 02 03 04 05</telephone>
      <telephone type="portable">06 07 08 09 10</telephone>
    </telephones>
    <emails>
      <email type="personnel">john.doe@wanadoo.fr</email>
      <email type="professionnel">john.doe@societe.com</email>
    </emails>
  </personne>
    
  <!-- Marie POPPINS -->
  <personne sexe="feminin">
    <nom>POPPINS</nom>
    <prenom>Marie</prenom>
    <adresse>
      <numero>28</numero>
      <voie type="avenue">avenue de la république</voie>
      <codePostal>13005</codePostal>
      <ville>MARSEILLE</ville>
      <pays>FRANCE</pays>
    </adresse>
    <telephones>
      <telephone type="professionnel">04 05 06 07 08</telephone>
    </telephones>
    <emails>
      <email type="professionnel">contact@poppins.fr</email>
    </emails>
  </personne>
    
    <!-- Batte MAN -->
  <personne sexe="masculin">
    <nom>MAN</nom>
    <prenom>Batte</prenom>
    <adresse>
      <numero>24</numero>
      <voie type="avenue">impasse des héros</voie>
      <codePostal>11004</codePostal>
      <ville>GOTHAM CITY</ville>
      <pays>USA</pays>
    </adresse>
    <telephones>
      <telephone type="professionnel">01 03 05 07 09</telephone>
    </telephones>
  </personne>
</repertoire>

Les expressions à écrire

Voici donc la liste des expressions XPath à écrire :

  • Sélectionner tous les nœuds descendants du deuxième nœud personne.
  • Sélectionner le nœud personne correspondant à l’individu ayant au moins 2 numéros de téléphone.
  • Sélectionner tous les nœuds personne.
  • Sélectionner le deuxième nœud personne dont le pays de domiciliation est la France.
  • Sélectionner tous les nœuds personne de sexe masculin le pays de domiciliation est les Etats-Unis.

C’est à vous de jouer ! 😉

Une solution

Comme à chaque fois, je vous fais part de ma solution.

Expression n°1

Le but de cette première expression était de sélectionner tous les nœuds descendants du deuxième nœud personne :

/repertoire/personne[position()=2]/descendant::*

Expression n°2

Le but de cette expression était de sélectionner le nœud personne correspondant à un individu ayant au moins 2 numéros de téléphone :

/repertoire/personne[count(telephones/telephone) > 1]

Expression n°3

Le but de cette troisième expression était de sélectionner tous les nœuds personne :

/repertoire/personne

ou encore :

//personne

Expression n°4

Le but de cette expression était de sélectionner le deuxième nœud personne dont le pays de domiciliation est la France :

/repertoire/personne[adresse/pays="FRANCE"][position()=2]

Expression n°5

Le but de la dernière expression était de sélectionner tous les nœuds personne de sexe masculin le pays de domiciliation est les Etats-Unis :

/repertoire/personne[@sexe="masculin"][adresse/pays="USA"]

Ce cours vous plait ?

Retrouvez ce cours en livre physique sur Amazon !