Xpath Tutorial
Xpath Tutorial
This tutorial explains the basics of XPath. It contains chapters discussing all the basic
components of XPath with suitable examples.
Audience
This tutorials has been designed for beginners to help them understand the basic concepts
related to XPath. This tutorial will give you enough understanding on XPath from where
you can take yourself to higher levels of expertise.
Prerequisites
Before proceeding with this tutorial, you should have basic knowledge of XML, HTML, and
JavaScript.
All the content and graphics published in this e-book are the property of Tutorials Point (I)
Pvt. Ltd. The user of this e-book is prohibited to reuse, retain, copy, distribute or republish
any contents or a part of contents of this e-book in any manner without written consent
of the publisher.
We strive to update the contents of our website and tutorials as timely and as precisely as
possible, however, the contents may contain inaccuracies or errors. Tutorials Point (I) Pvt.
Ltd. provides no guarantee regarding the accuracy, timeliness or completeness of our
website or its contents including this tutorial. If you discover any errors on our website or
in this tutorial, please notify us at [email protected].
i
XPath
Table of Contents
About the Tutorial .................................................................................................................................... i
Audience .................................................................................................................................................. i
Prerequisites ............................................................................................................................................ i
XSL .......................................................................................................................................................... 1
Features .................................................................................................................................................. 2
2. XPATH — EXPRESSION........................................................................................................... 3
ii
XPath
6. XPATH — AXES........................................................................................................................ 30
9. XPATH — PREDICATE........................................................................................................... 53
iii
1. XPath – Overview XPath
Before learning XPath, we should first understand XSL which stands for
Extensible Stylesheet Language. It is similar to XML as CSS is to HTML.
XSLT — used to transform XML documents into various other types of document.
What is XPath?
XPath is an official recommendation of the World Wide Web Consortium (W3C). It defines
a language to find information in an XML file. It is used to traverse elements and attributes
of an XML document. XPath provides various types of expressions which can be used to
enquire relevant information from the XML document.
Major part of XSLT — XPath is one of the major elements in XSLT standard and
is must have knowledge in order to work with XSLT documents.
1
XPath
One should keep the following points in mind, while working with XPath:
2
2. XPath — Expression XPath
An XPath expression generally defines a pattern in order to select a set of nodes. These
patterns are used by XSLT to perform transformations or by XPointer for addressing
purpose.
XPath specification specifies seven types of nodes which can be the output of execution of
the XPath expression.
Root
Element
Text
Attribute
Comment
Processing Instruction
Namespace
XPath uses a path expression to select node or a list of nodes from an XML document.
Following is the list of useful paths and expression to select any node/ list of nodes from
an XML document.
Expression Description
// Selection starts from the current node that match the selection
@ Selects attributes
3
XPath
class/student Example: Selects all student elements that are children of class
//student Selects all student elements no matter where they are in the document
Example
In this example, we've created a sample XML document, students.xml and its stylesheet
document students.xsl which uses the XPath expressions under select attribute of
various XSL tags to get the values of roll no, firstname, lastname, nickname and marks of
each student node.
students.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>
4
XPath
students.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>
5
XPath
6
3. XPath — Nodes XPath
In this chapter, we'll see the XPath expression in details covering common types of Nodes,
XPath defines and handles.
Root
1
Root element node of an XML Document.
Element
2
Element node.
Text
3
Text of an element node.
Attribute
4
Attribute of an element node.
Comment
5
Comment
Use Wildcard
Use /*, wild card expression to select the root node.
<p><xsl:value-of select="name(/*)"/></p>
Use Name
Use /class, to select root node by name.
<p><xsl:value-of select="name(/class)"/></p>
7
XPath
<p><xsl:value-of select="name(/class/*)"/></p>
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses the XPath expressions.
students.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>
8
XPath
students.xsl
9
XPath
<xsl:for-each select="/class/*">
<xsl:for-each select="/class/student">
<xsl:for-each select="//student">
10
XPath
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses the XPath expressions.
students.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>
students.xsl
11
XPath
<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/*">
<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>
<h3>Details of each Students. Xpath expression = "/class/student"</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>
12
XPath
</tr>
</xsl:for-each>
</table>
<h3>Details of each Students. Xpath expression = "//student"</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="//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>
13
XPath
<td><xsl:value-of select="firstname"/></td>
14
XPath
marks > 85 — get the text value of node "marks" and compare with a value.
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses the XPath expressions.
students.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>
students.xsl
15
XPath
<xsl:template match="/">
<html>
<body>
<h3>Details of each Students. Xpath expression = "/class/student"</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>
<h3>Details of each Students whose marks are greater than 85. Xpath
expression = "marks > 85"</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="//student">
<xsl:if test="marks > 85">
<tr>
<td>
16
XPath
<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:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
17
XPath
<td><xsl:value-of select="@rollno"/></td>
@rollno = 493 - get the text value of attribute "rollno" and compare with a value.
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses the XPath expressions.
students.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>
18
XPath
<marks>90</marks>
</student>
</class>
students.xsl
19
XPath
<th>First Name</th>
<th>Last Name</th>
<th>Nick Name</th>
<th>Marks</th>
</tr>
<xsl:for-each select="//student">
<xsl:if test="@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:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
20
XPath
<xsl:value-of select="/class/student/preceding-sibling::comment()"/>
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses the XPath expressions.
students.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="students.xsl"?>
<class>
21
XPath
students.xsl
<table border="1">
<tr bgcolor="#9acd32">
<th>Roll No</th>
<th>First Name</th>
<th>Last Name</th>
22
XPath
<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>
23
4. XPath — Absolute Path XPath
Location path specifies the location of node in XML document. This path can be absolute
or relative. If location path starts with root node or with '/' then it is an absolute path.
Following are few of the example locating the elements using absolute path.
<xsl:for-each select="/class/student">
<p><xsl:value-of select="/class/student/firstname"/></p>
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses XPath expressions.
students.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>
24
XPath
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
25
XPath
<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>
26
5. XPath — Relative Path XPath
Location path specifies the location of node in XML document. This path can be absolute
or relative. If location path starts with the node that we've selected, then it is a relative
path.
Following are a few examples locating the elements using relative path.
<p><xsl:value-of select="firstname"/></p>
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses the XPath expressions.
students.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>
27
XPath
</student>
</class>
students.xsl
28
XPath
29
6. XPath — Axes XPath
As location path defines the location of a node using absolute or relative path, axes are
used to identify elements by their relationship like parent, child, sibling, etc. Axes are
named so because they refer to axis on which elements are lying relative to an element.
Axis Description
ancestor-or-
Represents the current node and it's ancestors.
self
descendant-or-
Represents the current node and it's descendants.
self
following Represents all nodes that come after the current node.
following- Represents the following siblings of the context node. Siblings are at
sibling the same level as the current node and share it's parent.
Represents all nodes that come before the current node (i.e. before
preceding
it's opening tag).
30
XPath
<p><xsl:value-of select="firstname"/></p>
<xsl:value-of select="/class/student/preceding-sibling::comment()"/>
Example
In this example, we've created a sample XML document students.xml and its stylesheet
document students.xsl which uses the XPath expressions.
students.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>
students.xsl
31
XPath
32
7. XPath — Operators XPath
In this chapter, we'll see XPath operators and functions in details covering commonly used
XPath defines and handles. XPath defines Operators and functions on Nodes, String,
Number and Boolean types.
Comparison Operators
1
Comparison operators to compare values.
Boolean Operators
2
Boolean operators to check 'and', 'or' & 'not' functionalities.
Number Functions/Operators
3
Operators/Functions on numbers.
String Functions
4
Various string functions.
Node Functions/Operators
5
Various functions and operators acting on nodes.
Operator Description
= is equals to
!= is not equals to
33
XPath
Example
This example creates a table of <student> element with its attribute roll no and its child
<firstname>,<lastname><nickname> and <marks> by iterating over each student. It
checks marks to be greater than 90 and then prints the student(s) details.
students.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>
students.xsl
<xsl:template match="/">
34
XPath
<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">
<xsl:if test="marks > 90">
<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:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
35
XPath
Operator Description
Example
This example creates a table of <student> element with its attribute roll no and its child
<firstname>,<lastname><nickname> and <marks> by iterating over each student. It
checks rollno to be either 393 or 493 and then prints the student(s) details.
students.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="students.xsl"?>
<class>
<student rollno="393">
<firstname>Dinkar</firstname>
36
XPath
<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>
students.xsl
<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[(@rollno = 393) or ((@rollno = 493))]">
37
XPath
<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>
38
XPath
Operator Description
XPath defines the following functions on numbers to be used with the XPath expressions.
Function Description
ceiling() returns the smallest integer larger than the value provided.
floor() returns the largest integer smaller than the value provided.
Example
This example creates a table of <student> element with its attribute roll no and its child
<firstname>,<lastname><nickname> and <marks> by iterating over each student. It
calculates grades of the student and then prints the student(s) details.
students.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>
39
XPath
<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>
students.xsl
<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>
<th>Grade</th>
</tr>
<xsl:for-each select="class/student">
<tr>
<td>
<xsl:value-of select="@rollno"/>
</td>
40
XPath
<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>
<td>
<xsl:choose>
<xsl:when test="marks div 90 > 1">
High
</xsl:when>
<xsl:when test="marks div 80 > 1">
Medium
</xsl:when>
<xsl:otherwise>
Low
</xsl:otherwise>
</xsl:choose>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
41
XPath
starts-with(string1, string2)
1
Returns true when first string starts with the second string.
contains(string1, string2)
2
Returns true when the first string contains the second string.
substring-before(string1, string2)
4
Returns the part of string1 up before the first occurrence of string2.
substring-after(string1, string2)
5
Returns the part of string1 after the first occurrence of string2.
string-length(string)
6
Returns the length of string in terms of characters.
42
XPath
normalize-space(string)
7
Trims the leading and trailing space from string.
Example
This example creates a table of <student> element with their names and length of names,
by iterating over each student. It calculates length of the student name after concatenating
firstname and lastname and then prints the student(s) details.
students.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>
43
XPath
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.xsl
<xsl:template match="/">
<html>
<body>
<h2>Students</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Name</th>
<th>Length of Name</th>
</tr>
<xsl:for-each select="class/student">
<tr>
<td><xsl:value-of select="concat(firstname,' ',lastname)"/></td>
<td><xsl:value-of select="string-length(concat(firstname,' ',lastname))"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
44
XPath
Operator Description
XPath defines the following functions on nodes to be used with the XPath expressions.
Function Description
45
XPath
Example
This example creates a table of <student> element with their details, by iterating over
each student. It calculates the position of the student node then prints the student(s)
details along with serial no.
students.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>
students.xsl
46
XPath
<xsl:template match="/">
<html>
<body>
<h2>Students</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Serial No</th>
<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="position()"/></td>
<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>
47
XPath
48
8. XPath — Wildcard XPath
XPath defines the following wildcards on nodes to be used with the XPath expressions.
Wildcard Description
Example
This example creates a table of <student> element with their details, by iterating over
each student.
students.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>
49
XPath
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.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;">
50
XPath
<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>
51
XPath
52
9. XPath — Predicate XPath
Predicate refers to the XPath expression written in square brackets. It refers to restrict the
selected nodes in a node set for some condition. For example,
Predicate Description
Example
This example creates a table of <student> element with their details, by iterating over
each student. It calculates the position of the student node and then prints the student(s)
details along with serial no.
students.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>
53
XPath
<student rollno="593">
<firstname>Jasvir</firstname>
<lastname>Singh</lastname>
<nickname>Jazz</nickname>
<marks>90</marks>
</student>
</class>
students.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>
54
XPath
<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>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
55
XPath
56