0. XML exemple

Le xml qui servira principalement d'exemple pour la suite du cours:

 
Sélectionnez

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="xml-xpath.xslt"?>
<employes>
	<employe num="1">
		<nom>Dupont</nom>
		<prenom>Robert</prenom>
		<sexe>M</sexe>
		<service>ressources humaines</service>
		<tel>0645</tel>
		<!--poste interne-->
		<date_arrivée>03-04-2004</date_arrivée>
		<!--arrivée dans la société-->
	</employe>
	<employe num="2">
		<nom>Dupond</nom>
		<prenom>Maurice</prenom>
		<sexe>M</sexe>
		<service>Ingénierie</service>
		<tel>0842</tel>
		<date_arrivée>02-07-2004</date_arrivée>
	</employe>
	<employe num="3">
		<nom>Bertold</nom>
		<prenom>Lucie</prenom>
		<sexe>F</sexe>
		<service>ressources humaines</service>
		<tel>0675</tel>
		<date_arrivée>01-04-2005</date_arrivée>
	</employe>
	<employe num="5">
		<nom>Faubert</nom>
		<prenom>Jerome</prenom>
		<sexe>M</sexe>
		<service>Conception</service>
		<tel>0856</tel>
		<date_arrivée>30-11-2000</date_arrivée>
	</employe>
	<employe num="6">
		<nom>Geraltt</nom>
		<prenom>Jerome</prenom>
		<sexe>M</sexe>
		<service>ingénierie</service>
		<tel>0956</tel>
		<date_arrivée>23-11-2000</date_arrivée>
	</employe>
</employes>
 
 

I. Syntaxe et vocabulaire d'une expression Xpath 1.0

Une expression Xpath est composée de trois parties un axe, un test et un prédicat.

  • Un axe : permet de se déplacer dans l'arbre des noeuds xml: parents , fils ,ancêtres etc.....
    Par exemple :Child, parent, ancestor,self....
  • Un test : permet d'identifier le type du noeud recherché:attribut, racine etc.....il suit l'axe et doit être précédé de :: .
    Par exemple : parent::*, child::comment() etc....
  • Un prédicat : il sera étudié dans un autre cours , il consiste en condition sur les noeuds parcourus. Il est encadré par [ ] .

II. Les différents types de noeuds en Xpath 1.0

  • noeud parent: le ou les types de noeud qui peuvent contenir celui-ci
  • noeud fils: le ou les types de noeud que l'ont peut retrouver dans ce noeud
  • expression xpath: les expressions xpath permettant de cibler ce type de noeud : test et/ou axe
  • valeur textuelle: la valeur utilise lors d'un affichage ou d'une comparaison

II-A. Noeud racine (root)

  • noeud parent: aucun
  • noeud fils: element,comment,processing-instruction
  • expression xpath: node() (test), / (axe)
  • valeur textuelle: ensemble des contenus noeuds textes qui sont ses descendants

Si nous utilisons le xml exemple , sa valeur textuelle est : DupontRobertMressources humaines06 4503-04-2004DupondMauriceMIngénierie08 4202-07-2004BertoldLucieFressources humaines06 7501-04-2005FaubertJeromeMConception08 5630-11-2000GeralttJeromeMingénierie09 5623-11-2000 ,guère utilisable tel quel.

Le noeud racine (root) est l'élément hiérarchique le plus haut du document, c'est le noeud "invisible" qui contient tous les autres.Il faut le différencier du root element (élément racine) qui est l'unique noeud (et donc le premier) de type element qu'il peut avoir comme fils

II-B. Noeud élément (element)

  • noeud parent:root,element
  • noeud fils: attribute,namespace,element,comment,text
  • expression xpath: node()(test), * (test) (par défaut sauf derrière namespace et attribute)
  • valeur textuelle: ensemble des contenus noeuds textes qui sont ses descendants

Les noeuds de type element sont les plus évidents, ce sont les balises qui permettent de structurer l'information. Dans l'exemple nous avons :employes,employe,nom,prenom,sexe,service,tel,date_arrivée.Le noeud employes est le root element (élément racine)

II-C. Noeud texte (text)

  • noeud parent: element
  • noeud fils: aucun
  • expression xpath: node() (test), text()(test)
  • valeur textuelle: chaîne de caractères contenues

les chaînes contenues entre les balises d'un xml sont en réalité elle aussi vue comme des noeuds.Ici par exemple Dupont est le noeud text fils du premier noeud element nom.

II-D. Noeud attribut (attribute)

  • noeud parent: element
  • noeud fils: aucun
  • expression xpath: @*,attribute::* (axe+test) .La norme devrait permettre node() seul mais des limites de parseur l'empêche en général.C'est donc * précède de l'axe qui fixe le type recherché
  • valeur textuelle: chaîne de caractères entre les quote après le =
 
Sélectionnez

	<employe num="1">
		<nom>Dupont</nom>
		<prenom>Robert</prenom>
		<sexe>M</sexe>
		<service>ressources humaines</service>
		<tel>06 45</tel>
		<!--poste interne-->
		<date_arrivée>03-04-2004</date_arrivée>
		<!--arrivée dans la société-->
	</employe>

ici la valeur textuelle du noeud attribute num du noeud element employe est 1.

Ne pas oublier qu'une seule occurrence de "nom" d'attribut par noeud est autorisée.Attention aussi à l'emploi des " et ' .

II-E. Noeud commentaire (comment)

  • noeud parent: element,root
  • noeud fils: aucun
  • expression xpath node() (test), comment() (test)
  • valeur textuelle: La chaîne entre <--et -->

Même syntaxe que pour le HTML, le commentaire est la pour "expliquer".Néanmoins Xpath permet de le cibler et donc d'utiliser son contenu.

 
Sélectionnez

	<employe num="1">
		<nom>Dupont</nom>
		<prenom>Robert</prenom>
		<sexe>M</sexe>
		<service>ressources humaines</service>
		<tel>06 45</tel>
		<!--poste interne-->
		<date_arrivée>03-04-2004</date_arrivée>
		<!--arrivée dans la société-->
	</employe>

ici 2 noeuds de type comment fils du noeud employe. le premier ayant pour valeur textuelle: poste interne le second: arrivée dans la société

II-F. Noeud espace de noms (namespace)

  • noeud parent: element
  • noeud fils:aucun
  • expression xpath: namespace::* (axe+test).La norme devrait permettre node() seul mais des limites de parseur l'empêche en général.C'est donc * précède de l'axe qui fixe le type recherché
  • valeur textuelle:l'URI de l'espace de noms qui est associée au préfixe de l'espace de noms

Les namespace permettent d'associer certains noeud via leur nom expansé à leur URI à un traitement particulier. Prenons par exemple une feuille xslt:

 
Sélectionnez

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
	<xsl:template match="/"> 
 
	<test>
	<xsl:value-of select="."></xsl:value-of>
	</test>
 
	</xsl:template>
</xsl:stylesheet>

le noeud namespace est xmlns:xsl, sa valeur textuelle :http://www.w3.org/1999/XSL/Transform Tous les noeuds commençant par xsl: (le nom expansé) comme indiqué par xmlns:xsl seront associé à l'URI et, dans ce cas, si lu par un processeur XSLT seront considéré comme des instructions au lieu d'être du simple texte.

II-G. Noeud d'instructions de traitement (processing-instruction)

  • noeud parent: root
  • noeud fils:aucun
  • expression xpath: node()(test),processing-instruction() (test)
  • valeur textuelle:ce qui est contenu entre <? et ?>

Ces noeuds sont des instructions de traitements au processeur. Exemple:

 
Sélectionnez

<?xml-stylesheet type="text/xsl" href="xml-xpath.xslt"?>

Qui ordonne d'associer le xslt contenu mon fichier.xslt avec le xml traité. Ici par exemple la valeur textuelle est : xml-stylesheet type="text/xsl" href="xml-xpath.xslt"
ATTENTION

 
Sélectionnez

<?xml version="1.0" encoding="......"?>

L'entête du fichier ne peut jamais être atteinte par Xpath , elle est hors du noeud racine.

II-H. CDATA, l'exception

Les zones CDATA ne sont pas des noeuds, mais une zone de caractères "protégés".Tout caractère d'une zone de type CDATA est traité comme caractère de données.
Quand le parseur, passe dessus il considérera que tous les signes < et > sont respectivement remplacé par &lt; et &gt; .Enfin au niveau du traitement Xpath <![CDATA[ et ]]>sont ignorés

 
Sélectionnez

<?xml version="1.0" encoding="UTF-8"?>
<test> ceci est test sur <![CDATA[les valeurs < et >]]> .</test>

Ici la valeur textuelle de test (celle de son noeud texte) sera donc : ceci est test sur les valeurs &lt; et &gt; .