XSLT 元素详解:从基础到实战的完整指南

XSLT 元素详解:从基础到实战的完整指南 1. 引言XSLTExtensible Stylesheet Language Transformations是一种用于将 XML 文档转换为其他格式如 HTML、纯文本或其他 XML 文档的语言。XSLT 本身也是基于 XML 的它通过一组预定义的元素和指令来描述转换规则。本文将从基础到实战系统讲解 XSLT 的核心元素并通过丰富的代码实例帮助读者快速掌握。2. XSLT 基础结构一个标准的 XSLT 样式表以xsl:stylesheet或xsl:transform作为根元素。下面是一个最基础的 XSLT 文档结构?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform lt;xsl:template match/gt; lt;htmlgt; lt;bodygt; lt;h2gt;Hello, XSLT!lt;/h2gt; lt;/bodygt; lt;/htmlgt; lt;/xsl:templategt; /xsl:stylesheet在上面的示例中xmlns:xsl声明了 XSLT 命名空间version1.0指定了 XSLT 版本。xsl:template是 XSLT 中最核心的元素之一用于定义匹配规则。3. 模板元素xsl:template 与 xsl:apply-templatesxsl:template用于定义转换规则xsl:apply-templates则用于触发对子节点的模板匹配。二者配合使用可以实现对 XML 文档的递归遍历。3.1 基本用法假设有以下 XML 数据文件books.xml?xml version1.0 encodingUTF-8? bookstore book category编程 titleXML 入门到精通/title author张三/author price59.00/price /book book category设计 title网页设计实战/title author李四/author price45.50/price /book /bookstore对应的 XSLT 样式表books.xsl?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform lt;xsl:template match/gt; lt;htmlgt; lt;bodygt; lt;h2gt;图书列表lt;/h2gt; lt;xsl:apply-templates selectbookstore/book/gt; lt;/bodygt; lt;/htmlgt; lt;/xsl:templategt; lt;xsl:template matchbookgt; lt;pgt; lt;stronggt;lt;xsl:value-of selecttitle/gt;lt;/stronggt; 作者lt;xsl:value-of selectauthor/gt; 价格lt;xsl:value-of selectprice/gt; lt;/pgt; lt;/xsl:templategt; /xsl:stylesheet转换后的 HTML 输出如下html body h2图书列表/h2 pstrongXML 入门到精通/strong 作者张三 价格59.00/p pstrong网页设计实战/strong 作者李四 价格45.50/p /body /html4. 值输出元素xsl:value-ofxsl:value-of用于提取 XML 节点中的文本值并将其插入到输出文档中。它通过select属性指定要提取的 XPath 表达式。4.1 提取元素文本xsl:template matchbook p书名xsl:value-of selecttitle//p /xsl:template4.2 提取属性值xsl:template matchbook p分类xsl:value-of selectcategory//p /xsl:template注意属性名前需要加符号。上面的代码会输出分类编程。5. 循环元素xsl:for-eachxsl:for-each用于遍历节点集合对每个节点重复执行内部的内容。它非常适合处理列表类数据。?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform lt;xsl:template match/gt; lt;htmlgt; lt;bodygt; lt;h2gt;图书列表使用 for-eachlt;/h2gt; lt;ulgt; lt;xsl:for-each selectbookstore/bookgt; lt;ligt; lt;xsl:value-of selecttitle/gt; lt;xsl:value-of selectcategory/gt; lt;/ligt; lt;/xsl:for-eachgt; lt;/ulgt; lt;/bodygt; lt;/htmlgt; lt;/xsl:templategt; /xsl:stylesheet输出结果ul liXML 入门到精通编程/li li网页设计实战设计/li /ul6. 条件判断元素xsl:if 与 xsl:choose6.1 xsl:if 单条件判断xsl:if用于在满足指定条件时输出内容它没有else分支。xsl:template matchbook p xsl:value-of selecttitle/ xsl:if testprice 50 高价图书 /xsl:if /p /xsl:template6.2 xsl:choose 多条件判断xsl:choose类似于编程语言中的switch语句可以配合xsl:when和xsl:otherwise实现多分支判断。xsl:template matchbook p xsl:value-of selecttitle/ xsl:choose xsl:when testprice 80高端图书/xsl:when xsl:when testprice 40中端图书/xsl:when xsl:otherwise平价图书/xsl:otherwise /xsl:choose /p /xsl:template注意在 XPath 表达式中和需要分别写成lt;和gt;以避免与 XML 标签冲突。7. 排序元素xsl:sortxsl:sort用于对节点集合进行排序通常作为xsl:for-each或xsl:apply-templates的子元素使用。xsl:template match/ html body h2按价格排序的图书/h2 ul xsl:for-each selectbookstore/book xsl:sort selectprice>xsl:template match/ xsl:variable namesiteName selectCSDN 博客/ p欢迎来到 xsl:value-of select$siteName//p /xsl:template引用变量时需要在变量名前加$符号。8.2 xsl:param 定义可传参数xsl:param用于定义可接收外部传入值的参数常用于模板之间的数据传递。xsl:template namegreeting xsl:param nameusername select访客/ p你好xsl:value-of select$username//p /xsl:template调用带参数的模板xsl:call-template namegreeting xsl:with-param nameusername select王小明/ /xsl:call-template9. 模板调用元素xsl:call-templatexsl:call-template用于按名称直接调用一个已命名的模板与xsl:apply-templates的按模式匹配不同它是显式调用。?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform lt;xsl:template match/gt; lt;htmlgt; lt;bodygt; lt;xsl:call-template nameheader/gt; lt;pgt;正文内容...lt;/pgt; lt;xsl:call-template namefooter/gt; lt;/bodygt; lt;/htmlgt; lt;/xsl:templategt; lt;xsl:template nameheadergt; lt;h1gt;我的网站标题lt;/h1gt; lt;/xsl:templategt; lt;xsl:template namefootergt; lt;hr/gt; lt;pgt;版权所有 © 2026lt;/pgt; lt;/xsl:templategt; /xsl:stylesheet10. 文本与注释元素xsl:text 与 xsl:comment10.1 xsl:text 输出纯文本xsl:text用于输出纯文本内容可以精确控制空白字符。xsl:template matchbook p xsl:text书名/xsl:text xsl:value-of selecttitle/ xsl:text价格/xsl:text xsl:value-of selectprice/ xsl:text 元/xsl:text /p /xsl:template10.2 xsl:comment 生成注释xsl:template match/ html body xsl:comment本页面由 XSLT 自动生成/xsl:comment p页面内容.../p /body /html /xsl:template输出结果中会包含!--本页面由 XSLT 自动生成--注释。11. 复制元素xsl:copy 与 xsl:copy-of11.1 xsl:copy 浅复制xsl:copy仅复制当前节点本身不复制其子节点和属性。xsl:template matchbook xsl:copy xsl:apply-templates selecttitle/ /xsl:copy /xsl:template11.2 xsl:copy-of 深复制xsl:copy-of会复制节点及其所有子节点、属性和命名空间。xsl:template match/ xsl:copy-of selectbookstore/book[1]/ /xsl:template上面的代码会将第一本图书的完整 XML 结构原样输出。12. 数字格式化元素xsl:numberxsl:number用于生成格式化的序号常用于列表编号或章节编号。xsl:template matchbook p xsl:number valueposition() format1. / xsl:value-of selecttitle/ /p /xsl:template输出效果1. XML 入门到精通 2. 网页设计实战也可以使用formatA. 生成大写字母序号或formati. 生成罗马数字序号。13. 综合实战完整示例下面是一个综合运用多种 XSLT 元素的完整示例将books.xml转换为一个带样式的 HTML 页面。13.1 输入 XML?xml version1.0 encodingUTF-8? bookstore book category编程 titleXML 入门到精通/title author张三/author year2023/year price59.00/price /book book category编程 titleXSLT 实战指南/title author王五/author year2024/year price79.00/price /book book category设计 title网页设计实战/title author李四/author year2022/year price45.50/price /book /bookstore13.2 XSLT 样式表?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform lt;xsl:template match/gt; lt;htmlgt; lt;headgt; lt;titlegt;图书管理页面lt;/titlegt; lt;/headgt; lt;bodygt; lt;h2gt;图书列表lt;/h2gt; lt;xsl:apply-templates selectbookstore/bookgt; lt;xsl:sort selectprice>html head title图书管理页面/title /head body h2图书列表/h2 div styleborder:1px solid #ccc; margin:10px; padding:10px; h3XSLT 实战指南/h3 p作者王五/p p出版年份2024/p p价格79.00 元/p p分类编程/p p stylecolor:red;推荐图书/p /div div styleborder:1px solid #ccc; margin:10px; padding:10px; h3XML 入门到精通/h3 p作者张三/p p出版年份2023/p p价格59.00 元/p p分类编程/p /div div styleborder:1px solid #ccc; margin:10px; padding:10px; h3网页设计实战/h3 p作者李四/p p出版年份2022/p p价格45.50 元/p p分类设计/p /div /body /html14. 总结本文系统介绍了 XSLT 的核心元素包括模板匹配、值输出、循环、条件判断、排序、变量参数、模板调用、文本注释、节点复制和数字格式化等。掌握这些元素是编写高效 XSLT 样式表的基础。在实际项目中建议结合 XPath 表达式灵活运用这些元素并根据具体业务场景选择合适的转换策略。XSLT 虽然学习曲线略显陡峭但一旦掌握其核心思想就能在 XML 数据转换领域游刃有余。希望本文的代码实例能帮助读者快速上手 XSLT 开发。