XPath - คู่มือฉบับย่อ
ก่อนที่จะเรียนรู้ XPath เราควรทำความเข้าใจ XSL ซึ่งหมายถึงก่อน Extensible Sไทเลสชีท Lความปวดร้าว คล้ายกับ XML เนื่องจาก CSS คือ HTML
ต้องการ XSL
ในกรณีของเอกสาร HTML จะมีการกำหนดแท็กไว้ล่วงหน้าเช่น table, div, span เป็นต้นเบราว์เซอร์จะรู้วิธีเพิ่มสไตล์และแสดงโดยใช้สไตล์ CSS แต่ในกรณีของเอกสาร XML จะไม่มีการกำหนดแท็กไว้ล่วงหน้า ในการทำความเข้าใจและจัดรูปแบบเอกสาร XMLWorld Wide Web Consortium (W3C)พัฒนา XSL ซึ่งสามารถทำหน้าที่เป็นภาษาสไตล์ชีตที่ใช้ XML เอกสาร XSL ระบุว่าเบราว์เซอร์ควรแสดงเอกสาร XML อย่างไร
ต่อไปนี้เป็นส่วนหลักของ XSL -
XSLT - ใช้ในการแปลงเอกสาร XML เป็นเอกสารประเภทอื่น ๆ
XPath - ใช้เพื่อนำทางเอกสาร XML
XSL-FO - ใช้ในการจัดรูปแบบเอกสาร XML
XPath คืออะไร?
XPath เป็นคำแนะนำอย่างเป็นทางการของ World Wide Web Consortium (W3C) กำหนดภาษาเพื่อค้นหาข้อมูลในไฟล์ XML ใช้เพื่อสำรวจองค์ประกอบและแอตทริบิวต์ของเอกสาร XML XPath จัดเตรียมนิพจน์ประเภทต่างๆซึ่งสามารถใช้เพื่อสอบถามข้อมูลที่เกี่ยวข้องจากเอกสาร XML
Structure Definitions - XPath กำหนดส่วนต่างๆของเอกสาร XML เช่นองค์ประกอบแอตทริบิวต์ข้อความเนมสเปซคำสั่งการประมวลผลข้อคิดเห็นและโหนดเอกสาร
Path Expressions - XPath ให้นิพจน์พา ธ ที่มีประสิทธิภาพเลือกโหนดหรือรายการโหนดในเอกสาร XML
Standard Functions - XPath มีไลบรารีที่สมบูรณ์ของฟังก์ชันมาตรฐานสำหรับการจัดการค่าสตริงค่าตัวเลขการเปรียบเทียบวันที่และเวลาการจัดการโหนดและ QName การจัดการลำดับค่าบูลีนเป็นต้น
Major part of XSLT - XPath เป็นหนึ่งในองค์ประกอบหลักในมาตรฐาน XSLT และต้องมีความรู้เพื่อทำงานกับเอกสาร XSLT
W3C recommendation - XPath เป็นคำแนะนำอย่างเป็นทางการของ World Wide Web Consortium (W3C)
ควรคำนึงถึงประเด็นต่อไปนี้ในขณะที่ทำงานกับ XPath -
- XPath เป็นองค์ประกอบหลักของมาตรฐานXSLT
- XSLT ไม่สามารถทำงานได้หากไม่มี XPath
- XPath เป็นพื้นฐานของ XQuery และ XPointer
โดยทั่วไปนิพจน์ XPath จะกำหนดรูปแบบเพื่อเลือกชุดของโหนด XSLT ใช้รูปแบบเหล่านี้เพื่อทำการแปลงหรือโดย XPointer เพื่อกำหนดจุดประสงค์
ข้อกำหนด XPath ระบุโหนดเจ็ดประเภทซึ่งสามารถเป็นเอาต์พุตของการดำเนินการของนิพจน์ XPath
- Root
- Element
- Text
- Attribute
- Comment
- คำสั่งการประมวลผล
- Namespace
XPath ใช้นิพจน์พา ธ เพื่อเลือกโหนดหรือรายการโหนดจากเอกสาร XML
ต่อไปนี้เป็นรายการเส้นทางและนิพจน์ที่มีประโยชน์เพื่อเลือกโหนด / รายการโหนดจากเอกสาร XML
ส. | นิพจน์และคำอธิบาย |
---|---|
1 | node-name เลือกโหนดทั้งหมดที่มีชื่อ "nodename" |
2 | / การเลือกเริ่มต้นจากโหนดรูท |
3 | // การเลือกเริ่มจากโหนดปัจจุบันที่ตรงกับการเลือก |
4 | . เลือกโหนดปัจจุบัน |
5 | .. เลือกพาเรนต์ของโหนดปัจจุบัน |
6 | @ เลือกแอตทริบิวต์ |
7 | student ตัวอย่าง - เลือกโหนดทั้งหมดที่มีชื่อ "student" |
8 | class/student ตัวอย่าง - เลือกองค์ประกอบของนักเรียนทั้งหมดที่เป็นลูกของชั้นเรียน |
9 | //student เลือกองค์ประกอบของนักเรียนทั้งหมดไม่ว่าจะอยู่ที่ใดในเอกสาร |
ตัวอย่าง
ในตัวอย่างนี้เราได้สร้างเอกสาร XML ตัวอย่าง, students.xml และเอกสารสไตล์ชีท students.xsl ซึ่งใช้นิพจน์ XPath ภายใต้ select แอตทริบิวต์ของแท็ก XSL ต่างๆเพื่อรับค่าของ roll no, firstname, lastname, ชื่อเล่นและเครื่องหมายของโหนดนักเรียนแต่ละโหนด
student.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>
student.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>
ตรวจสอบผลลัพธ์

ในบทนี้เราจะเห็นนิพจน์ XPath ในรายละเอียดที่ครอบคลุมประเภททั่วไปของโหนด XPath กำหนดและจัดการ
ส. | ประเภทโหนดและคำอธิบาย |
---|---|
1 | ราก โหนดองค์ประกอบรูทของเอกสาร XML |
2 | ธาตุ โหนดองค์ประกอบ |
3 | ข้อความ ข้อความของโหนดองค์ประกอบ |
4 | แอตทริบิวต์ คุณสมบัติของโหนดองค์ประกอบ |
5 | แสดงความคิดเห็น แสดงความคิดเห็น |
พา ธ ตำแหน่งระบุตำแหน่งของโหนดในเอกสาร XML เส้นทางนี้สามารถเป็นค่าสัมบูรณ์หรือสัมพัทธ์ หากเส้นทางตำแหน่งเริ่มต้นด้วยโหนดรูทหรือด้วย '/' แสดงว่าเป็นเส้นทางสัมบูรณ์ ต่อไปนี้เป็นตัวอย่างบางส่วนในการค้นหาองค์ประกอบโดยใช้เส้นทางสัมบูรณ์
/class/student - เลือกโหนดนักเรียนภายในโหนดรูทคลาส
<xsl:for-each select = "/class/student">
/class/student/firstname - เลือกชื่อแรกของโหนดนักเรียนภายในโหนดรูทคลาส
<p><xsl:value-of select = "/class/student/firstname"/></p>
ตัวอย่าง
ในตัวอย่างนี้เราได้สร้างเอกสาร XML ตัวอย่าง students.xml และเอกสารสไตล์ชีต students.xsl ซึ่งใช้นิพจน์ XPath
ต่อไปนี้เป็นตัวอย่าง XML ที่ใช้
student.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>
student.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>
ตรวจสอบผลลัพธ์

พา ธ ตำแหน่งระบุตำแหน่งของโหนดในเอกสาร XML เส้นทางนี้สามารถเป็นค่าสัมบูรณ์หรือสัมพัทธ์ หากเส้นทางตำแหน่งเริ่มต้นด้วยโหนดที่เราเลือกแสดงว่าเป็นเส้นทางสัมพัทธ์
ต่อไปนี้เป็นตัวอย่างการค้นหาองค์ประกอบโดยใช้เส้นทางสัมพัทธ์
firstname - เลือกชื่อที่เกี่ยวข้องกับโหนดของนักเรียน
<p><xsl:value-of select = "firstname"/></p>
ตัวอย่าง
ในตัวอย่างนี้เราได้สร้างเอกสาร XML ตัวอย่าง students.xml และเอกสารสไตล์ชีต students.xsl ซึ่งใช้นิพจน์ XPath
ต่อไปนี้เป็นตัวอย่าง XML ที่ใช้
student.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>
student.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>
ตรวจสอบผลลัพธ์

เนื่องจากเส้นทางตำแหน่งกำหนดตำแหน่งของโหนดโดยใช้พา ธ สัมบูรณ์หรือสัมพัทธ์แกนจึงถูกใช้เพื่อระบุองค์ประกอบตามความสัมพันธ์เช่น parent, child, sibling, เป็นต้น Axes ถูกตั้งชื่อเช่นนี้เนื่องจากอ้างถึงแกนที่องค์ประกอบวางอยู่สัมพันธ์กับองค์ประกอบ
ต่อไปนี้เป็นรายการค่าแกนต่างๆ
ส. | แกนและคำอธิบาย |
---|---|
1 | ancestor แสดงถึงบรรพบุรุษของโหนดปัจจุบันซึ่งรวมถึงพาเรนต์จนถึงโหนดรูท |
2 | ancestor-or-self แสดงโหนดปัจจุบันและบรรพบุรุษ |
3 | attribute แสดงถึงคุณลักษณะของโหนดปัจจุบัน |
4 | child แสดงถึงชายน์ของโหนดปัจจุบัน |
5 | descendant แสดงถึงทายาทของโหนดปัจจุบัน ลูกหลานรวมลูกของโหนดจนถึงโหนดลีฟ (ไม่มีลูกอีกต่อไป) |
6 | descendant-or-self แสดงโหนดปัจจุบันและเป็นลูกหลาน |
7 | following แสดงโหนดทั้งหมดที่มาหลังจากโหนดปัจจุบัน |
8 | following-sibling แสดงถึงพี่น้องต่อไปนี้ของโหนดบริบท พี่น้องอยู่ในระดับเดียวกับโหนดปัจจุบันและแชร์เป็นระดับบนสุด |
9 | namespace แสดงเนมสเปซของโหนดปัจจุบัน |
10 | parent แสดงพาเรนต์ของโหนดปัจจุบัน |
11 | preceding แสดงโหนดทั้งหมดที่อยู่ก่อนโหนดปัจจุบัน (เช่นก่อนแท็กเปิด) |
12 | self แสดงโหนดปัจจุบัน |
ต่อไปนี้เป็นตัวอย่างบางส่วนเกี่ยวกับการใช้แกน
firstname - เลือกชื่อที่เกี่ยวข้องกับโหนดของนักเรียน
<p><xsl:value-of select = "firstname"/></p>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>
ตัวอย่าง
ในตัวอย่างนี้เราได้สร้างเอกสาร XML ตัวอย่าง students.xml และเอกสารสไตล์ชีต students.xsl ซึ่งใช้นิพจน์ XPath
ต่อไปนี้เป็นตัวอย่าง XML ที่ใช้
student.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>
student.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>
ตรวจสอบผลลัพธ์

ในบทนี้เราจะเห็นตัวดำเนินการ XPath และฟังก์ชันในรายละเอียดซึ่งครอบคลุม XPath ที่ใช้กันทั่วไป defines และ handles. XPath กำหนดตัวดำเนินการและฟังก์ชันบนโหนดสตริงตัวเลขและชนิดบูลีน
ต่อไปนี้เป็นรายการที่เราจะพูดถึง
ส. | ตัวดำเนินการ / ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | ตัวดำเนินการเปรียบเทียบ ตัวดำเนินการเปรียบเทียบเพื่อเปรียบเทียบค่า |
2 | ตัวดำเนินการบูลีน ตัวดำเนินการบูลีนเพื่อตรวจสอบฟังก์ชัน 'และ', 'หรือ' & 'ไม่ใช่' |
3 | ฟังก์ชันตัวเลข / ตัวดำเนินการ ตัวดำเนินการ / ฟังก์ชั่นเกี่ยวกับตัวเลข |
4 | ฟังก์ชันสตริง ฟังก์ชันสตริงต่างๆ |
5 | ฟังก์ชันโหนด / ตัวดำเนินการ ฟังก์ชันและตัวดำเนินการต่างๆที่ทำหน้าที่บนโหนด |
XPath กำหนดสัญลักษณ์แทนต่อไปนี้บนโหนดที่จะใช้กับนิพจน์ XPath
ส. | WildCard และคำอธิบาย |
---|---|
1 | * ใช้เพื่อจับคู่โหนดใด ๆ |
2 | . ใช้เพื่อจับคู่โหนดปัจจุบันในบริบท |
3 | @* ใช้เพื่อจับคู่แอตทริบิวต์ใด ๆ |
4 | node() ใช้เพื่อจับคู่โหนดประเภทใดก็ได้ |
ตัวอย่าง
ตัวอย่างนี้สร้างตารางขององค์ประกอบ <student> พร้อมรายละเอียดโดยการทำซ้ำทับนักเรียนแต่ละคน
student.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>
student.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>
ตรวจสอบผลลัพธ์

เพรดิเคตหมายถึงนิพจน์ XPath ที่เขียนในวงเล็บเหลี่ยม หมายถึงการ จำกัด โหนดที่เลือกในโหนดที่กำหนดสำหรับเงื่อนไขบางอย่าง ตัวอย่างเช่น,
ส. | เพรดิเคตและคำอธิบาย |
---|---|
1 | /class/student[1] เลือกองค์ประกอบนักเรียนคนแรกซึ่งเป็นลูกขององค์ประกอบชั้นเรียน |
2 | /class/student[last()] เลือกองค์ประกอบของนักเรียนคนสุดท้ายซึ่งเป็นลูกขององค์ประกอบชั้นเรียน |
3 | /class/student[@rolllno = 493] เลือกองค์ประกอบนักเรียนด้วย rollno 493 |
4 | /class/student[marks>85] เลือกองค์ประกอบนักเรียนที่มีเครื่องหมาย> 85 |
ตัวอย่าง
ตัวอย่างนี้สร้างตารางขององค์ประกอบ <student> พร้อมรายละเอียดโดยการทำซ้ำทับนักเรียนแต่ละคน จะคำนวณตำแหน่งของโหนดนักเรียนจากนั้นพิมพ์รายละเอียดนักเรียนพร้อมกับหมายเลขซีเรียล
student.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>
student.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>
ตรวจสอบผลลัพธ์
