概念
XPath 是W3C标准,专门用于在XML文档中导航、查找节点,是XSLT的核心基础;XSLT中select=""、test=""内部表达式全部使用XPath。
- 通过路径表达式定位节点
- 内置超100个标准函数:字符串、数值、日期比较、节点处理、逻辑运算等
7种节点类型
文档节点(根节点)、元素节点、属性节点、文本节点、注释节点、处理指令节点、命名空间节点。
示例:
<title lang="eng">Harry Potter</title>
<title>→ 元素节点lang="eng"→ 属性节点Harry Potter→ 文本节点
概念
- 基本值(原子值 Atomic value):没有子、没有父的节点内容,例如
eng、29.99 - 项目(Item):项目 = 节点 或者 基本值
XML节点之间关系
以 <bookstore><book><title></title></book></bookstore> 为例
- 父(Parent):每个元素、属性都仅有一个父;
book是title的父 - 子(Children):元素可以拥有多个子节点;
title、price是book的子 - 同胞(Sibling):拥有同一个父节点;同一层级title、price互为同胞
- 先辈(Ancestor):父、父的父,向上所有层级;
title的先辈:book、bookstore
路径表达式
依靠路径/步骤选取XML节点
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
</bookstore>Code language: HTML, XML (xml)
| 表达式 | 含义 |
|---|---|
bookstore | 选取根下 bookstore 元素 |
/bookstore | 绝对路径,从根节点开始匹配 |
bookstore/book | 选取bookstore下所有book子元素 |
//book | 文档所有位置的book元素(全局搜索) |
//@lang | 选取所有名为lang的属性节点 |
XPath 函数:position()
<xsl:value-of select="position()" />Code language: HTML, XML (xml)
position()是XPath内置函数,获取当前遍历节点在节点集中的序号,从1开始计数。
例子,输出序号
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head></head>
<body>
<ul>
<!--遍历所有学生 class/student -->
<xsl:for-each select="class/student">
<xsl:sort select="age"/> <!--按年龄升序排序-->
<!--筛选身高>160的学生-->
<xsl:if test="height > 160">
<li>
<xsl:value-of select="position()" />、<!--输出序号-->
<xsl:value-of select="name"/>;
<!--多重条件判断-->
<xsl:choose>
<xsl:when test="height > 200">
<b><xsl:value-of select="age"/></b>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="age"/>
</xsl:otherwise>
</xsl:choose>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)