XPath - Hướng dẫn nhanh

Trước khi học XPath, trước tiên chúng ta nên hiểu XSL là viết tắt của Extensible Sbảng đánh máy Lđau khổ. Nó tương tự như XML cũng như CSS đối với HTML.

Cần cho XSL

Trong trường hợp tài liệu HTML, các thẻ được xác định trước như table, div, span, v.v. Trình duyệt biết cách thêm kiểu vào chúng và hiển thị chúng bằng kiểu CSS. Nhưng trong trường hợp tài liệu XML, các thẻ không được xác định trước. Để hiểu và tạo kiểu một tài liệu XML,World Wide Web Consortium (W3C)đã phát triển XSL có thể hoạt động như một Ngôn ngữ biểu định kiểu dựa trên XML. Tài liệu XSL chỉ định cách trình duyệt hiển thị tài liệu XML.

Sau đây là các phần chính của XSL -

  • XSLT - được sử dụng để chuyển đổi các tài liệu XML thành nhiều loại tài liệu khác.

  • XPath - được sử dụng để điều hướng các tài liệu XML.

  • XSL-FO - được sử dụng để định dạng tài liệu XML.

XPath là gì?

XPath là một khuyến nghị chính thức của World Wide Web Consortium (W3C). Nó định nghĩa một ngôn ngữ để tìm thông tin trong một tệp XML. Nó được sử dụng để duyệt qua các phần tử và thuộc tính của một tài liệu XML. XPath cung cấp nhiều loại biểu thức khác nhau có thể được sử dụng để hỏi thông tin liên quan từ tài liệu XML.

  • Structure Definitions - XPath xác định các phần của tài liệu XML như phần tử, thuộc tính, văn bản, không gian tên, lệnh xử lý, nhận xét và các nút tài liệu

  • Path Expressions - XPath cung cấp các biểu thức đường dẫn mạnh mẽ chọn các nút hoặc danh sách các nút trong tài liệu XML.

  • Standard Functions - XPath cung cấp một thư viện phong phú các hàm tiêu chuẩn để thao tác các giá trị chuỗi, giá trị số, so sánh ngày và giờ, thao tác nút và QName, thao tác chuỗi, giá trị Boolean, v.v.

  • Major part of XSLT - XPath là một trong những yếu tố chính trong tiêu chuẩn XSLT và phải có kiến ​​thức để làm việc với các tài liệu XSLT.

  • W3C recommendation - XPath là một khuyến nghị chính thức của World Wide Web Consortium (W3C).

Bạn nên ghi nhớ những điểm sau khi làm việc với XPath:

  • XPath là thành phần cốt lõi của tiêu chuẩn XSLT .
  • XSLT không thể hoạt động nếu không có XPath.
  • XPath là cơ sở của XQuery và XPointer.

Biểu thức XPath thường xác định một mẫu để chọn một tập hợp các nút. Các mẫu này được XSLT sử dụng để thực hiện các phép biến đổi hoặc bởi XPointer cho mục đích định địa chỉ.

Đặc tả XPath chỉ định bảy loại nút có thể là đầu ra của việc thực thi biểu thức XPath.

  • Root
  • Element
  • Text
  • Attribute
  • Comment
  • Hướng dẫn xử lý
  • Namespace

XPath sử dụng biểu thức đường dẫn để chọn nút hoặc danh sách các nút từ tài liệu XML.

Sau đây là danh sách các đường dẫn và biểu thức hữu ích để chọn bất kỳ nút / danh sách các nút nào từ một tài liệu XML.

Không. Biểu thức & Mô tả
1

node-name

Chọn tất cả các nút có tên đã cho "nodename"

2

/

Lựa chọn bắt đầu từ nút gốc

3

//

Lựa chọn bắt đầu từ nút hiện tại phù hợp với lựa chọn

4

.

Chọn nút hiện tại

5

..

Chọn nút cha của nút hiện tại

6

@

Chọn thuộc tính

7

student

Ví dụ - Chọn tất cả các nút có tên "sinh viên"

số 8

class/student

Ví dụ - Chọn tất cả các phần tử sinh viên là con của lớp

9

//student

Chọn tất cả các phần tử của sinh viên bất kể chúng ở đâu trong tài liệu

Thí dụ

Trong ví dụ này, chúng tôi đã tạo một tài liệu XML mẫu, student.xml và tài liệu biểu định kiểu của nó students.xsl sử dụng các biểu thức XPath dưới select thuộc tính của các thẻ XSL khác nhau để nhận các giá trị của cuộn số, họ, tên, biệt hiệu và dấu của mỗi nút sinh viên.

sinh viên.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>

sinh viên.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>

Xác minh đầu ra

Trong chương này, chúng ta sẽ xem biểu thức XPath chi tiết về các loại Nút phổ biến, định nghĩa và xử lý XPath.

Không. Loại nút & Mô tả
1 Nguồn gốc

Nút phần tử gốc của Tài liệu XML.

2 Thành phần

Nút phần tử.

3 Bản văn

Văn bản của một nút phần tử.

4 Thuộc tính

Thuộc tính của một nút phần tử.

5 Bình luận

Bình luận

Đường dẫn vị trí chỉ định vị trí của nút trong tài liệu XML. Đường dẫn này có thể là tuyệt đối hoặc tương đối. Nếu đường dẫn vị trí bắt đầu bằng nút gốc hoặc bằng '/' thì đó là đường dẫn tuyệt đối. Sau đây là một vài ví dụ về định vị các phần tử bằng cách sử dụng đường dẫn tuyệt đối.

/class/student - chọn các nút sinh viên trong nút gốc của lớp.

<xsl:for-each select = "/class/student">

/class/student/firstname - chọn tên đầu tiên của một nút sinh viên trong nút gốc của lớp.

<p><xsl:value-of select = "/class/student/firstname"/></p>

Thí dụ

Trong ví dụ này, chúng tôi đã tạo một tài liệu XML mẫu students.xml và tài liệu biểu định kiểu của nó students.xsl sử dụng các biểu thức XPath.

Sau đây là XML mẫu được sử dụng.

sinh viên.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>

sinh viên.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>

Xác minh đầu ra

Đường dẫn vị trí chỉ định vị trí của nút trong tài liệu XML. Đường dẫn này có thể là tuyệt đối hoặc tương đối. Nếu đường dẫn vị trí bắt đầu bằng nút mà chúng ta đã chọn thì đó là một đường dẫn tương đối.

Sau đây là một số ví dụ định vị các phần tử bằng cách sử dụng đường dẫn tương đối.

firstname - chọn tên liên quan đến các nút sinh viên.

<p><xsl:value-of select = "firstname"/></p>

Thí dụ

Trong ví dụ này, chúng tôi đã tạo một tài liệu XML mẫu students.xml và tài liệu biểu định kiểu của nó students.xsl sử dụng các biểu thức XPath.

Sau đây là XML mẫu được sử dụng.

sinh viên.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>

sinh viên.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>

Xác minh đầu ra

Vì đường dẫn vị trí xác định vị trí của nút bằng đường dẫn tuyệt đối hoặc tương đối, các trục được sử dụng để xác định các phần tử theo mối quan hệ của chúng như parent, child, sibling, vv Các trục được đặt tên như vậy bởi vì chúng đề cập đến trục mà các phần tử nằm trên đó so với một phần tử.

Sau đây là danh sách các giá trị Axis khác nhau.

Không. Trục & Mô tả
1

ancestor

Đại diện cho tổ tiên của nút hiện tại, bao gồm cha mẹ cho đến nút gốc.

2

ancestor-or-self

Đại diện cho nút hiện tại và tổ tiên của nó.

3

attribute

Đại diện cho các thuộc tính của nút hiện tại.

4

child

Đại diện cho các nút con của nút hiện tại.

5

descendant

Đại diện cho con cháu của nút hiện tại. Con cháu bao gồm con của nút cho đến nút lá (không có con nữa).

6

descendant-or-self

Đại diện cho nút hiện tại và nút con của nó.

7

following

Đại diện cho tất cả các nút đến sau nút hiện tại.

số 8

following-sibling

Đại diện cho các anh chị em sau của nút ngữ cảnh. Anh chị em ở cùng cấp với nút hiện tại và chia sẻ nó là nút cha.

9

namespace

Đại diện cho không gian tên của nút hiện tại.

10

parent

Đại diện cho nút cha của nút hiện tại.

11

preceding

Đại diện cho tất cả các nút đến trước nút hiện tại (tức là trước thẻ mở của nó).

12

self

Đại diện cho nút hiện tại.

Sau đây là một vài ví dụ về việc sử dụng các trục.

firstname - chọn tên liên quan đến các nút sinh viên.

<p><xsl:value-of select = "firstname"/></p>
<xsl:value-of select = "/class/student/preceding-sibling::comment()"/>

Thí dụ

Trong ví dụ này, chúng tôi đã tạo một tài liệu XML mẫu students.xml và tài liệu biểu định kiểu của nó students.xsl sử dụng các biểu thức XPath.

Sau đây là XML mẫu được sử dụng.

sinh viên.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>

sinh viên.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>

Xác minh đầu ra

Trong chương này, chúng ta sẽ xem các toán tử và hàm XPath chi tiết về XPath thường được sử dụng defineshandles. XPath định nghĩa các toán tử và chức năng trên các kiểu Nodes, String, Number và Boolean.

Sau đây là danh sách mà chúng ta sẽ thảo luận.

Không. Toán tử / Chức năng & Mô tả
1 Toán tử so sánh

Toán tử so sánh để so sánh các giá trị.

2 Toán tử Boolean

Toán tử boolean để kiểm tra các chức năng 'và', 'hoặc' & 'không phải'.

3 Số hàm / toán tử

Các toán tử / Hàm trên số.

4 Hàm chuỗi

Các hàm chuỗi khác nhau.

5 Chức năng / Toán tử nút

Các chức năng và toán tử khác nhau hoạt động trên các nút.

XPath xác định các ký tự đại diện sau trên các nút được sử dụng với các biểu thức XPath.

Không. WildCard & Description
1

*

được sử dụng để khớp với bất kỳ nút nào.

2

.

được sử dụng để khớp với nút hiện tại trong ngữ cảnh.

3

@*

được sử dụng để khớp với bất kỳ thuộc tính nào

4

node()

được sử dụng để khớp với bất kỳ loại nút nào

Thí dụ

Ví dụ này tạo một bảng gồm phần tử <student> với thông tin chi tiết của chúng, bằng cách lặp qua từng học sinh.

sinh viên.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>

sinh viên.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>

Xác minh đầu ra

Vị từ đề cập đến biểu thức XPath được viết trong dấu ngoặc vuông. Nó đề cập đến việc hạn chế các nút được chọn trong một tập hợp nút cho một số điều kiện. Ví dụ,

Không. Vị ngữ & Mô tả
1

/class/student[1]

Chọn phần tử sinh viên đầu tiên là con của phần tử lớp.

2

/class/student[last()]

Chọn phần tử sinh viên cuối cùng là con của phần tử lớp.

3

/class/student[@rolllno = 493]

Chọn phần tử sinh viên với rollno 493.

4

/class/student[marks>85]

Chọn phần tử sinh viên có điểm> 85.

Thí dụ

Ví dụ này tạo một bảng gồm phần tử <student> với thông tin chi tiết của chúng, bằng cách lặp qua từng học sinh. Nó tính toán vị trí của nút sinh viên và sau đó in (các) thông tin chi tiết của sinh viên cùng với số sê-ri.

sinh viên.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>

sinh viên.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>

Xác minh đầu ra