当前位置: 首页 > news >正文

XSLT快速入门:XML转换全攻略

XSLT 编辑 XML 的基本概念

XSLT(Extensible Stylesheet Language Transformations)是一种用于转换 XML 文档的语言。它可以将 XML 文档转换为其他格式,如 HTML、文本或另一个 XML 文档。XSLT 使用 XPath 表达式在 XML 文档中导航和选择节点。

XSLT 的基本结构

XSLT 样式表通常以.xsl.xslt为扩展名。一个基本的 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="xml" indent="yes"/> <xsl:template match="/"> <!-- 转换逻辑 --> </xsl:template> </xsl:stylesheet>

使用 XSLT 编辑 XML 的常见操作

选择节点并输出

XSLT 可以通过xsl:value-of选择并输出节点的值。

<xsl:template match="/"> <root> <xsl:value-of select="book/title"/> </root> </xsl:template>
循环遍历节点

使用xsl:for-each可以遍历 XML 文档中的多个节点。

<xsl:template match="/"> <books> <xsl:for-each select="library/book"> <book> <title><xsl:value-of select="title"/></title> <author><xsl:value-of select="author"/></author> </book> </xsl:for-each> </books> </xsl:template>
条件判断

XSLT 支持条件判断,使用xsl:ifxsl:choose

<xsl:template match="/"> <books> <xsl:for-each select="library/book"> <xsl:if test="price > 20"> <expensive-book> <xsl:value-of select="title"/> </expensive-book> </xsl:if> </xsl:for-each> </books> </xsl:template>
修改节点值

通过 XSLT 可以修改 XML 节点的值。

<xsl:template match="/"> <books> <xsl:for-each select="library/book"> <book> <title><xsl:value-of select="title"/></title> <discounted-price> <xsl:value-of select="price * 0.9"/> </discounted-price> </book> </xsl:for-each> </books> </xsl:template>
添加新节点

可以在转换过程中添加新的节点。

<xsl:template match="/"> <books> <xsl:for-each select="library/book"> <book> <xsl:copy-of select="title"/> <xsl:copy-of select="author"/> <category>Fiction</category> </book> </xsl:for-each> </books> </xsl:template>
删除节点

通过不选择某些节点,可以间接实现删除效果。

<xsl:template match="/"> <books> <xsl:for-each select="library/book"> <book> <title><xsl:value-of select="title"/></title> <!-- 不选择 author 节点 --> </book> </xsl:for-each> </books> </xsl:template>

实际应用示例

假设有以下 XML 文件library.xml

<?xml version="1.0" encoding="UTF-8"?> <library> <book> <title>The Great Gatsby</title> <author>F. Scott Fitzgerald</author> <price>15.99</price> </book> <book> <title>1984</title> <author>George Orwell</author> <price>12.99</price> </book> </library>
转换为 HTML

使用 XSLT 将 XML 转换为 HTML:

<?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:template match="/"> <html> <body> <h1>Book List</h1> <table border="1"> <tr> <th>Title</th> <th>Author</th> <th>Price</th> </tr> <xsl:for-each select="library/book"> <tr> <td><xsl:value-of select="title"/></td> <td><xsl:value-of select="author"/></td> <td><xsl:value-of select="price"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
过滤和排序

过滤价格高于 13 的书籍并按标题排序:

<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <expensive-books> <xsl:for-each select="library/book[price > 13]"> <xsl:sort select="title"/> <book> <xsl:copy-of select="title"/> <xsl:copy-of select="price"/> </book> </xsl:for-each> </expensive-books> </xsl:template> </xsl:stylesheet>

高级功能

使用命名模板

命名模板可以在多个地方重复使用。

<xsl:template name="display-book"> <xsl:param name="book"/> <div class="book"> <h2><xsl:value-of select="$book/title"/></h2> <p>Author: <xsl:value-of select="$book/author"/></p> </div> </xsl:template> <xsl:template match="/"> <html> <body> <xsl:for-each select="library/book"> <xsl:call-template name="display-book"> <xsl:with-param name="book" select="."/> </xsl:call-template> </xsl:for-each> </body> </html> </xsl:template>
使用变量

XSLT 支持变量,但变量一旦赋值不可更改。

<xsl:template match="/"> <xsl:variable name="total" select="sum(library/book/price)"/> <total-price> <xsl:value-of select="$total"/> </total-price> </xsl:template>

总结

XSLT 是一种强大的 XML 转换语言,可以用于编辑、转换和操作 XML 文档。通过 XPath 表达式,可以灵活地选择和处理 XML 节点。XSLT 支持循环、条件判断、变量和模板等高级功能,适用于复杂的 XML 处理任务。

http://www.jsqmd.com/news/487650/

相关文章:

  • 【论文精读】CodeWMBench 揭示 AI 生成代码水印的残酷真相
  • AudioSeal Pixel Studio从零开始:Windows平台Anaconda环境完整配置流程
  • TB6612FNG直流电机驱动板原理图设计,已量产
  • 工业级隔离型RS485接口电路原理图设计,已量产
  • 孙珍妮AI形象生成镜像指南:Z-Image-Turbo LoRA模型安全加载与沙箱隔离配置
  • Cosmos-Reason1-7B企业应用:化工厂监控视频中识别泄漏源与扩散模拟建议
  • 探索COMSOL中的Merging off-gamma BIC计算
  • std::process::Command
  • 用M文件在Matlab 2019a中实现两电平三相SVPWM
  • 乐高兼容ESP32对讲机:模块化嵌入式音频通信设计
  • 旋转卡壳
  • 基于Simulink的固定频率滞环电流控制Boost变换器
  • 南北阁Nanbeige 4.1-3B行业方案:数据库课程设计智能辅导系统
  • HCIP第二次作业
  • YOLOv8训练Visidron小目标检测数据集及精度提升实践
  • Phi-4-reasoning-vision-15B应用场景:工业质检报告截图→缺陷类型/位置/等级三字段结构化
  • 南北阁 4.1-3B 部署案例:中小团队低成本构建私有化AI对话系统的落地路径
  • COMSOL 重现基于 THz 超构表面 BIC
  • AudioSeal Pixel Studio代码实例:Python调用PyTorch实现水印生成与识别
  • 手把手教你学Simulink——基于Simulink的主从式多机器人协同搬运控制仿真
  • 《创业之路》-904- 人间清醒:故事在开始时,结局就已注定——从“党指挥枪”到华为“力出一孔”,破解组织分裂的千年宿命
  • 类欧几里得
  • 零代码部署!Qwen3-VL-WEBUI镜像带你轻松玩转图像理解和对话
  • 刷题笔记:力扣第54、59题(螺旋矩阵)
  • Qwen2.5-VL-7B-Instruct新手入门:从安装到第一个图文对话
  • 嵌入式机电系统设计:电控伸缩刀刃实践指南
  • 单机切 Redis Cluster 后,为何满屏都是 CROSSSLOT 报错?
  • 彻底理解B树和B+树
  • YOLOv8与GLM-OCR双剑合璧:实现视频字幕实时提取与翻译
  • 手把手教你用Conda在Jetson AGX Orin上配置PyTorch 1.12和Torchvision 0.16.0