XPath - Guide rapide
Avant d'apprendre XPath, nous devons d'abord comprendre XSL qui signifie Extensible Sfeuille de style Language. Il est similaire au XML comme CSS l'est au HTML.
Besoin de XSL
Dans le cas des documents HTML, les balises sont prédéfinies telles que table, div, span, etc. Le navigateur sait comment leur ajouter du style et les afficher à l'aide de styles CSS. Mais dans le cas de documents XML, les balises ne sont pas prédéfinies. Afin de comprendre et de styliser un document XML,World Wide Web Consortium (W3C)développé XSL qui peut agir comme un langage de feuille de style basé sur XML. Un document XSL spécifie comment un navigateur doit rendre un document XML.
Voici les principales parties de XSL -
XSLT - utilisé pour transformer des documents XML en divers autres types de documents.
XPath - utilisé pour naviguer dans les documents XML.
XSL-FO - utilisé pour formater des documents XML.
Qu'est-ce que XPath?
XPath est une recommandation officielle du World Wide Web Consortium (W3C). Il définit une langue pour rechercher des informations dans un fichier XML. Il est utilisé pour parcourir les éléments et les attributs d'un document XML. XPath fournit différents types d'expressions qui peuvent être utilisées pour rechercher des informations pertinentes dans le document XML.
Structure Definitions - XPath définit les parties d'un document XML comme les nœuds d'élément, d'attribut, de texte, d'espace de nom, d'instruction de traitement, de commentaire et de document
Path Expressions - XPath fournit des expressions de chemin puissantes sélectionnez des nœuds ou une liste de nœuds dans des documents XML.
Standard Functions - XPath fournit une riche bibliothèque de fonctions standard pour la manipulation de valeurs de chaîne, de valeurs numériques, de comparaison de date et d'heure, de manipulation de nœuds et de QName, de manipulation de séquences, de valeurs booléennes, etc.
Major part of XSLT - XPath est l'un des éléments majeurs de la norme XSLT et doit avoir des connaissances pour travailler avec des documents XSLT.
W3C recommendation - XPath est une recommandation officielle du World Wide Web Consortium (W3C).
Il faut garder à l'esprit les points suivants, tout en travaillant avec XPath -
- XPath est le composant principal de la norme XSLT .
- XSLT ne peut pas fonctionner sans XPath.
- XPath est la base de XQuery et XPointer.
Une expression XPath définit généralement un modèle afin de sélectionner un ensemble de nœuds. Ces modèles sont utilisés par XSLT pour effectuer des transformations ou par XPointer à des fins d'adressage.
La spécification XPath spécifie sept types de nœuds qui peuvent être la sortie de l'exécution de l'expression XPath.
- Root
- Element
- Text
- Attribute
- Comment
- Instruction de traitement
- Namespace
XPath utilise une expression de chemin pour sélectionner un nœud ou une liste de nœuds à partir d'un document XML.
Voici la liste des chemins et expressions utiles pour sélectionner n'importe quel nœud / liste de nœuds à partir d'un document XML.
S.No. | Expression et description |
---|---|
1 | node-name Sélectionnez tous les nœuds avec le nom donné "nodename" |
2 | / La sélection commence à partir du nœud racine |
3 | // La sélection commence à partir du nœud actuel qui correspond à la sélection |
4 | . Sélectionne le nœud actuel |
5 | .. Sélectionne le parent du nœud actuel |
6 | @ Sélectionne les attributs |
sept | student Exemple - Sélectionne tous les nœuds avec le nom «étudiant» |
8 | class/student Exemple - Sélectionne tous les éléments étudiants qui sont des enfants de la classe |
9 | //student Sélectionne tous les éléments de l'élève, peu importe où ils se trouvent dans le document |
Exemple
Dans cet exemple, nous avons créé un exemple de document XML, Students.xml et son document de feuille de style students.xsl qui utilise les expressions XPath sous select attribut de diverses balises XSL pour obtenir les valeurs de roll no, prénom, nom, surnom et marques de chaque nœud étudiant.
étudiants.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
étudiants.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "class/student">
<tr>
<td> <xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Vérifiez la sortie
Dans ce chapitre, nous verrons l'expression XPath dans les détails couvrant les types courants de nœuds, les définitions XPath et les poignées.
S.No. | Type de nœud et description |
---|---|
1 | Racine Nœud d'élément racine d'un document XML. |
2 | Élément Nœud d'élément. |
3 | Texte Texte d'un nœud d'élément. |
4 | Attribut Attribut d'un nœud d'élément. |
5 | Commentaire Commentaire |
Le chemin d'emplacement spécifie l'emplacement du nœud dans le document XML. Ce chemin peut être absolu ou relatif. Si le chemin de l'emplacement commence par le nœud racine ou par '/', il s'agit d'un chemin absolu. Voici quelques exemples de localisation des éléments à l'aide d'un chemin absolu.
/class/student - sélectionnez les nœuds étudiants dans le nœud racine de la classe.
<xsl:for-each select = "/class/student">
/class/student/firstname - sélectionnez le prénom d'un nœud étudiant dans le nœud racine de la classe.
<p><xsl:value-of select = "/class/student/firstname"/></p>
Exemple
Dans cet exemple, nous avons créé un exemple de document XML students.xml et son document de feuille de style students.xsl qui utilise les expressions XPath.
Voici l'exemple XML utilisé.
étudiants.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
étudiants.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<h3>Details of each Students. </h3>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<tr>
<td><xsl:value-of select = "/class/student[1]/@rollno"/></td>
<td><xsl:value-of select = "/class/student[1]/firstname"/></td>
<td><xsl:value-of select = "/class/student[1]/lastname"/></td>
<td><xsl:value-of select = "/class/student[1]/nickname"/></td>
<td><xsl:value-of select = "/class/student[1]/marks"/></td>
</tr>
<tr>
<td>
<xsl:value-of select = "/class/student/@rollno"/>
</td>
<td><xsl:value-of select = "/class/student[2]/firstname"/></td>
<td><xsl:value-of select = "/class/student[2]/lastname"/></td>
<td><xsl:value-of select = "/class/student[2]/nickname"/></td>
<td><xsl:value-of select = "/class/student[2]/marks"/></td>
</tr>
<tr>
<td>
<xsl:value-of select = "/class/student[3]/@rollno"/>
</td>
<td><xsl:value-of select = "/class/student[3]/firstname"/></td>
<td><xsl:value-of select = "/class/student[3]/lastname"/></td>
<td><xsl:value-of select = "/class/student[3]/nickname"/></td>
<td><xsl:value-of select = "/class/student[3]/marks"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Vérifiez la sortie
Le chemin d'emplacement spécifie l'emplacement du nœud dans le document XML. Ce chemin peut être absolu ou relatif. Si le chemin de l'emplacement commence par le nœud que nous avons sélectionné, il s'agit d'un chemin relatif.
Voici quelques exemples de localisation des éléments à l'aide d'un chemin relatif.
firstname - sélectionnez le prénom lié aux nœuds étudiants.
<p><xsl:value-of select = "firstname"/></p>
Exemple
Dans cet exemple, nous avons créé un exemple de document XML students.xml et son document de feuille de style students.xsl qui utilise les expressions XPath.
Voici l'exemple XML utilisé.
étudiants.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
étudiants.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<h3>Details of each Students. </h3>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "/class/student">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Vérifiez la sortie
Comme le chemin d'emplacement définit l'emplacement d'un nœud à l'aide d'un chemin absolu ou relatif, les axes sont utilisés pour identifier les éléments par leur relation comme parent, child, sibling, etc. Les axes sont nommés ainsi parce qu'ils font référence à l'axe sur lequel les éléments reposent par rapport à un élément.
Voici la liste des différentes valeurs d'axe.
S.No. | Axe et description |
---|---|
1 | ancestor Représente les ancêtres du nœud actuel qui incluent les parents jusqu'au nœud racine. |
2 | ancestor-or-self Représente le nœud actuel et ses ancêtres. |
3 | attribute Représente les attributs du nœud actuel. |
4 | child Représente les enfants du nœud actuel. |
5 | descendant Représente les descendants du nœud actuel. Les descendants incluent les enfants du nœud jusqu'au nœud feuille (plus d'enfants). |
6 | descendant-or-self Représente le nœud actuel et ses descendants. |
sept | following Représente tous les nœuds qui viennent après le nœud actuel. |
8 | following-sibling Représente les frères suivants du nœud de contexte. Les frères et sœurs sont au même niveau que le nœud actuel et partagent son parent. |
9 | namespace Représente l'espace de noms du nœud actuel. |
dix | parent Représente le parent du nœud actuel. |
11 | preceding Représente tous les nœuds qui précèdent le nœud actuel (c'est-à-dire avant sa balise d'ouverture). |
12 | self Représente le nœud actuel. |
Voici quelques exemples d'utilisation des axes.
firstname - sélectionnez le prénom lié aux nœuds étudiants.
<p><xsl:value-of select = "firstname"/></p>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
Exemple
Dans cet exemple, nous avons créé un exemple de document XML students.xml et son document de feuille de style students.xsl qui utilise les expressions XPath.
Voici l'exemple XML utilisé.
étudiants.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<!-- Comment: This is a list of student -->
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
étudiants.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/" >
<html>
<body>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
<br/>
<xsl:text>First Student: </xsl:text>
<xsl:value-of select = "/class/student/child::firstname" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Vérifiez la sortie
Dans ce chapitre, nous verrons les opérateurs et les fonctions XPath dans les détails couvrant XPath couramment utilisés defines et handles. XPath définit les opérateurs et les fonctions sur les types Nodes, String, Number et Boolean.
Voici la liste dont nous allons discuter.
S.No. | Opérateurs / Fonctions et description |
---|---|
1 | Opérateurs de comparaison Opérateurs de comparaison pour comparer les valeurs. |
2 | Opérateurs booléens Opérateurs booléens pour vérifier les fonctionnalités 'et', 'ou' & 'not'. |
3 | Fonctions / opérateurs numériques Opérateurs / Fonctions sur les nombres. |
4 | Fonctions de chaîne Diverses fonctions de chaîne. |
5 | Fonctions / opérateurs du nœud Diverses fonctions et opérateurs agissant sur les nœuds. |
XPath définit les caractères génériques suivants sur les nœuds à utiliser avec les expressions XPath.
S.No. | WildCard et description |
---|---|
1 | * utilisé pour correspondre à n'importe quel nœud. |
2 | . utilisé pour correspondre au nœud actuel dans le contexte. |
3 | @* utilisé pour correspondre à n'importe quel attribut |
4 | node() utilisé pour correspondre à un nœud de tout type |
Exemple
Cet exemple crée un tableau de l'élément <student> avec leurs détails, en itérant sur chaque étudiant.
étudiants.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
étudiants.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<xsl:apply-templates select = "class/*" />
</body>
</html>
</xsl:template>
<xsl:template match = "class/*">
<xsl:apply-templates select = "@rollno" />
<xsl:apply-templates select = "firstname" />
<xsl:apply-templates select = "lastname" />
<xsl:apply-templates select = "nickname" />
<xsl:apply-templates select = "marks" />
<br />
</xsl:template>
<xsl:template match = "@rollno">
<span style = "font-size = 22px;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "firstname">
First Name:<span style = "color:blue;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "lastname">
Last Name:<span style = "color:green;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "nickname">
Nick Name:<span style = "color:red;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
<xsl:template match = "marks">
Marks:<span style = "color:gray;">
<xsl:value-of select = "." />
</span>
<br />
</xsl:template>
</xsl:stylesheet>
Vérifiez la sortie
Prédicat fait référence à l'expression XPath écrite entre crochets. Cela fait référence à restreindre les nœuds sélectionnés dans un ensemble de nœuds pour certaines conditions. Par exemple,
S.No. | Prédicat et description |
---|---|
1 | /class/student[1] Sélectionnez le premier élément étudiant qui est l'enfant de l'élément classe. |
2 | /class/student[last()] Sélectionnez le dernier élément étudiant qui est l'enfant de l'élément classe. |
3 | /class/student[@rolllno = 493] Sélectionnez l'élément étudiant avec rollno 493. |
4 | /class/student[marks>85] Sélectionnez l'élément étudiant avec des notes> 85. |
Exemple
Cet exemple crée un tableau de l'élément <student> avec leurs détails, en itérant sur chaque étudiant. Il calcule la position du nœud étudiant, puis imprime les détails de l'élève avec le numéro de série.
étudiants.xml
<?xml version = "1.0"?>
<?xml-stylesheet type = "text/xsl" href = "students.xsl"?>
<class>
<student rollno = "393">
<firstname>Dinkar</firstname>
<lastname>Kad</lastname>
<nickname>Dinkar</nickname>
<marks>85</marks>
</student>
<student rollno = "493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>Vinni</nickname>
<marks>95</marks>
</student>
<student rollno = "593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
étudiants.xsl
<?xml version = "1.0" encoding = "UTF-8"?>
<xsl:stylesheet version = "1.0"
xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match = "/">
<html>
<body>
<h2>Students</h2>
<table border = "1">
<tr bgcolor = "#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select = "/class/student[1]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[last()]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[@rollno = 493]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
<xsl:for-each select = "/class/student[marks > 85]">
<tr>
<td><xsl:value-of select = "@rollno"/></td>
<td><xsl:value-of select = "firstname"/></td>
<td><xsl:value-of select = "lastname"/></td>
<td><xsl:value-of select = "nickname"/></td>
<td><xsl:value-of select = "marks"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>