XPath

概念


XPath 是W3C标准,专门用于在XML文档中导航、查找节点,是XSLT的核心基础;XSLT中select=""test=""内部表达式全部使用XPath。

  • 通过路径表达式定位节点
  • 内置超100个标准函数:字符串、数值、日期比较、节点处理、逻辑运算等

7种节点类型

文档节点(根节点)、元素节点属性节点、文本节点、注释节点、处理指令节点、命名空间节点。

示例:<title lang="eng">Harry Potter</title>

  • <title> → 元素节点
  • lang="eng" → 属性节点
  • Harry Potter → 文本节点

概念

  1. 基本值(原子值 Atomic value):没有子、没有父的节点内容,例如eng29.99
  2. 项目(Item):项目 = 节点 或者 基本值

XML节点之间关系

<bookstore><book><title></title></book></bookstore> 为例

  1. 父(Parent):每个元素、属性都仅有一个父;booktitle的父
  2. 子(Children):元素可以拥有多个子节点;titlepricebook的子
  3. 同胞(Sibling):拥有同一个父节点;同一层级title、price互为同胞
  4. 先辈(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 &gt; 160">
            <li>
                <xsl:value-of select="position()" /><!--输出序号-->
                <xsl:value-of select="name"/><!--多重条件判断-->
                <xsl:choose>
                    <xsl:when test="height &gt; 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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注