FEATURED · 精选文章

XSLT 编辑 XML:从入门到实战的完整指南

发布时间 / 2026/8/29 4:49:47
来源 / 创域科博编辑部
栏目 / 资讯中心
XSLT 编辑 XML:从入门到实战的完整指南 1. 引言XSLTExtensible Stylesheet Language Transformations是一种用于将 XML 文档转换为其他格式如 HTML、纯文本或其他 XML 结构的声明式语言。它不仅是数据展示的利器更是 XML 数据编辑、清洗和重构的核心工具。本文将通过丰富的代码实例系统讲解如何使用 XSLT 对 XML 文档进行各种编辑操作。2. XSLT 基础概念在深入编辑技巧之前先了解 XSLT 的几个核心概念XSLT 处理器负责读取 XML 源文档和 XSLT 样式表并生成输出结果的引擎常见的有 Saxon、libxml2 等。模板规则通过xsl:template定义匹配 XML 树中的特定节点并指定输出内容。XPath 表达式用于在 XML 文档中定位节点是 XSLT 模板匹配和值提取的基础。样式表一个符合 XSLT 规范的 XML 文档以xsl:stylesheet或xsl:transform为根元素。3. 环境准备与第一个示例本文所有示例均基于 XSLT 1.0 和 2.0 标准可使用任意主流 XSLT 处理器运行。下面是一个最简单的转换示例将 XML 转换为 HTML 列表。源 XML 文件books.xml?xml version1.0 encodingUTF-8? catalog book idb1 titleXML 入门/title author张三/author price59.00/price /book book idb2 titleXSLT 实战/title author李四/author price79.00/price /book /catalog对应的 XSLT 样式表books.xsl?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:template match/ html body h1图书列表/h1 ul xsl:for-each selectcatalog/book li xsl:value-of selecttitle/ 作者xsl:value-of selectauthor/ /li /xsl:for-each /ul /body /html /xsl:template /xsl:stylesheet使用命令行工具如 Saxon执行转换java -jar saxon9he.jar -s:books.xml -xsl:books.xsl -o:books.html输出结果books.htmlhtml body h1图书列表/h1 ul liXML 入门作者张三/li liXSLT 实战作者李四/li /ul /body /html4. 使用模板匹配编辑 XML模板匹配是 XSLT 最强大的编辑机制。通过定义多个模板规则可以精确控制每个节点的处理方式实现增删改查等编辑操作。4.1 修改元素内容下面的示例将所有图书价格上调 10%并保留两位小数?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform !-- 默认复制所有节点和属性 -- xsl:template match*|node() xsl:copy xsl:apply-templates select*|node()/ /xsl:copy /xsl:template !-- 修改价格元素 -- xsl:template matchprice price xsl:value-of selectformat-number(. * 1.1, 0.00)/ /price /xsl:template /xsl:stylesheet转换后price59.00/price变为price64.90/priceprice79.00/price变为price86.90/price。4.2 删除特定节点以下样式表删除所有价格超过 70 元的图书节点?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:template match*|node() xsl:copy xsl:apply-templates select*|node()/ /xsl:copy /xsl:template !-- 删除价格大于 70 的图书 -- xsl:template matchbook[price 70]/ /xsl:stylesheet注意空模板规则表示匹配到的节点不产生任何输出从而实现删除效果。4.3 新增元素与属性下面的示例为每本图书添加一个category属性和一个discount子元素?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:template match*|node() xsl:copy xsl:apply-templates select*|node()/ /xsl:copy /xsl:template xsl:template matchbook book xsl:copy-of select*/ xsl:attribute namecategory技术/xsl:attribute xsl:apply-templates/ discount0.85/discount /book /xsl:template /xsl:stylesheet5. 使用 XPath 精确定位与编辑XPath 是 XSLT 的查询语言掌握常用 XPath 表达式可以大幅提升编辑效率。以下是一些常用场景。5.1 按条件筛选节点只输出价格在 50 到 80 之间的图书xsl:template match/ result xsl:apply-templates selectcatalog/book[price 50 and price 80]/ /result /xsl:template5.2 使用位置索引选取第一本和最后一本图书xsl:template match/ result xsl:copy-of selectcatalog/book[1]/ xsl:copy-of selectcatalog/book[last()]/ /result /xsl:template5.3 使用通配符与轴选取所有子元素和所有属性xsl:template match/ result xsl:copy-of selectcatalog/book/*/ xsl:copy-of selectcatalog/book/*/ /result /xsl:template6. 高级编辑技巧6.1 使用变量与参数通过xsl:variable和xsl:param实现可复用的编辑逻辑。下面的示例使用参数控制是否包含折扣信息?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:param nameshowDiscount selectfalse/ xsl:template match*|node() xsl:copy xsl:apply-templates select*|node()/ /xsl:copy /xsl:template xsl:template matchbook book xsl:copy-of select*/ xsl:apply-templates/ xsl:if test$showDiscount true discount0.85/discount /xsl:if /book /xsl:template /xsl:stylesheet运行时传入参数java -jar saxon9he.jar -s:books.xml -xsl:books.xsl -o:books_out.xml showDiscounttrue6.2 使用排序与分组按价格降序排列图书并按作者分组输出?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:template match/ result xsl:for-each selectcatalog/book xsl:sort selectprice>?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xsl:template nameformatPrice xsl:param namevalue/ xsl:value-of selectformat-number($value, ¥#,##0.00)/ /xsl:template xsl:template matchprice price xsl:call-template nameformatPrice xsl:with-param namevalue select./ /xsl:call-template /price /xsl:template /xsl:stylesheet7. 处理命名空间处理带命名空间的 XML 时需要在样式表中声明相同的命名空间。以下示例处理 SOAP 风格的 XML?xml version1.0 encodingUTF-8? xsl:stylesheet version1.0 xmlns:xslhttp://www.w3.org/1999/XSL/Transform xmlns:soaphttp://schemas.xmlsoap.org/soap/envelope/ xmlns:ordhttp://example.com/orders xsl:template match/ result xsl:apply-templates select//ord:order/ /result /xsl:template xsl:template matchord:order order id{id} xsl:value-of selectord:total/ /order /xsl:template /xsl:stylesheet8. 常见问题与调试技巧输出空白过多在样式表根元素上添加xsl:strip-space elements*/可去除源文档中的空白节点。模板不生效检查 XPath 表达式是否匹配目标节点注意命名空间前缀是否正确声明。属性值模板在属性值中使用{表达式}语法可以动态生成属性值如book id{id}。调试输出使用xsl:message在处理器控制台输出调试信息。xsl:template matchbook xsl:message正在处理图书xsl:value-of selecttitle//xsl:message !-- 其他处理逻辑 -- /xsl:template9. 总结XSLT 提供了一套完整、声明式的 XML 编辑方案。通过模板匹配、XPath 定位、变量参数和命名模板等机制开发者可以高效地完成 XML 数据的增删改查、格式转换和结构重组。虽然 XSLT 的学习曲线相对陡峭但一旦掌握其核心思想处理复杂 XML 编辑任务将变得游刃有余。建议读者结合本文示例在实际项目中逐步实践以加深理解。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻