欢迎光临
我们一直在努力

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:if 或 xsl: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 处理任务。

赞(0)
未经允许不得转载:171主机测评 » XSLT快速入门:XML转换全攻略
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址