XSLT选择模式详解:for-each、value-of与apply-templates用法

唐可
唐可
发布时间:2026-10-13| 3人浏览过
原创

本文详细讲解XSLT中的选择模式,包括使用遍历节点、取值以及应用模板。内容涵盖基础语法、排序规则及实际代码示例,旨在帮助用户高效从XML中提取并格式化数据。

什么是XSLT选择模式

XSLT(Extensible Stylesheet Language Transformations)的选择模式主要通过带有select属性的标记,将数据从XML文档中提取出来。这是一种结构清晰且简单的数据处理方法。在使用任何XSLT功能前,必须在样式表头声明命名空间。

标准命名空间声明如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes"/>
</xsl:stylesheet>

注意:早期的教程可能引用http://www.w3.org/TR/WD-xsl,但现代Web开发应严格遵循W3C标准http://www.w3.org/1999/XSL/Transform。

核心选择与处理语句

第1步:使用xsl:for-each遍历节点

用于逐个选择符合条件的节点。例如,若有一个用户列表,需要提取所有用户的姓名,需先定位到包含所有用户的父节点,再循环内部的具体用户节点。

假设源XML文件users.xml内容如下:

<?xml version="1.0" encoding="GB2312"?>
<Users>
  <User>
    <Name>5do8</Name>
    <ID>1</ID>
    <Professional>.NET,PHP Design</Professional>
  </User>
  <User>
    <Name>cjjer</Name>
    <ID>2</ID>
    <Professional>DataBase Manage</Professional>
  </User>
</Users>

对应的XSL样式表user_list.xsl写法:

<xsl:for-each select="/Users/User">
  Name: <xsl:value-of select="Name" />
  <br />
</xsl:for-each>

关键点: select属性支持XPath语法,用于精确定位当前上下文下的子节点或属性。

第2步:使用xsl:value-of获取节点值

用于提取当前选中节点的文本内容。在上述例子中,<xsl:value-of select="Name" />即取出Name标签内的字符串。此标签通常自闭合,无需闭合标签。

第3步:使用xsl:apply-templates应用模板

是更高级的处理方式,它不会像for-each那样强制线性执行,而是根据当前节点匹配预定义的xsl:template。这种方式适合复杂结构的XML解析。

<xsl:apply-templates select="/Users/User" />

配合模板定义使用:

<xsl:template match="User">
  <p>用户ID: <xsl:value-of select="ID" /></p>
  <p>名称: <xsl:value-of select="Name" /></p>
</xsl:template>

XSLT排序处理技巧

在提取数据时,往往需要对结果进行排序。可以使用xsl:sort元素作为xsl:for-each的子元素来实现。

1. 字母顺序排序

通过设置order属性控制升序或降序:

  • 升序:<xsl:sort order="ascending" select="@id" />
  • 降序:<xsl:sort order="descending" select="@id" />

2. 区分大小写排序

利用case-order属性指定大写字母优先或小写字母优先:

  • 大写优先:<xsl:sort case-order="upper-first" select="Name" />
  • 小写优先:<xsl:sort case-order="lower-first" select="Name" />

3. 数据类型排序

默认情况下,数值可能被当作字符串比较(例如"10"排在"2"前面)。若要正确进行数值比较,需指定data-type:

  • 文本类型:<xsl:sort data-type="text" select="@id" /> (结果:10, 2, 44...)
  • 数字类型:<xsl:sort data-type="number" select="@id" /> (结果:2, 10, 44...)

绑定XSL与XML

为了让浏览器正确渲染,需在XML文件的第二行添加样式表引用:

<?xml-stylesheet type="text/xsl" href="user_list.xsl"?>

保存后,在支持XML转换的现代浏览器(如Chrome, Firefox, Edge)中打开XML文件即可看到格式化后的HTML内容。IE系列因版本较老,可能需要特定配置或已不再推荐使用。

以上就是XSLT选择模式与排序处理的详细内容,更多关于XML数据转换的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。