Xpath 简明教程

XPath - Expression

XPath 表达式通常定义一个模式,以便选择一组节点。XSLT 使用这些模式来执行转换,XPointer 使用这些模式来寻址。

XPath 规范指定了七种类型的节点,它们可以是 XPath 表达式执行的输出。

  1. Root

  2. Element

  3. Text

  4. Attribute

  5. Comment

  6. Processing Instruction

  7. Namespace

XPath 使用路径表达式从 XML 文档中选择节点或节点列表。

以下是用于从 XML 文档中选择任何节点/节点列表的有用路径和表达式的列表。

S.No.

Expression & Description

1

node-name 选择具有指定名称 “nodename” 的所有节点

2

/ 从根节点开始选择

3

// 从符合选择的当前节点开始选择

4

. Selects the current node

5

.. 选择当前节点的父级

6

@ Selects attributes

7

student 示例 − 选择带有名称“student”的所有节点

8

class/student 示例 − 所有学生元素都是 class 的子项

9

无论在文档中的什么位置,选择所有 student 元素

Example

在此示例中,我们创建了一个示例 XML 文档 students.xml 及其样式表文档 students.xsl ,该文档使用 XPath 表达式在各种 XSL 标记的 select 属性下,获取每个 student 节点的学号、first name、last name、nickname 和成绩的值。

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

<?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>

Verify the output

xpath students