XML + XSLT 转换HTML 完整示例
准备两份文件:
students.xml:原始数据XML文档,存放学生信息transform.xsl:XSL样式表,用于将XML转换为HTML页面
浏览器加载students.xml时,会自动引用XSLT规则渲染成网页。
XML文件声明编码为
ISO-8859-1(西欧字符集),一些非英语的文字可能无法正常存储,直接导致乱码;需要代码统一修正编码为UTF-8,彻底解决乱码问题。
students.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>
<class>
<student>
<name>Tom</name>
<age>12</age>
<height>145</height>
</student>
<student>
<name>Jack</name>
<age>16</age>
<height>175</height>
</student>
<student>
<name>Smiths</name>
<age>22</age>
<height>245</height>
</student>
</class>Code language: HTML, XML (xml)
重点说明:
<?xml-stylesheet ... ?>处理指令:告诉浏览器使用transform.xsl转换当前XMLencoding="UTF-8"支持所有语言字符,避免乱码
transform.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Student List</title>
</head>
<body>
<h3>Student Name List</h3>
<ul>
<!-- 循环读取所有 class/student 节点 -->
<xsl:for-each select="class/student">
<li>
<xsl:value-of select="name"/>
</li>
</xsl:for-each>
</ul>
</body>
</html>
</xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)
核心语法解释
<xsl:stylesheet>:XSLT根标签,声明命名空间<xsl:template match="/">:匹配XML根节点,转换入口<xsl:for-each select="class/student">:遍历每一个学生节点<xsl:value-of select="name"/>:取出<name>节点文本内容
3、运行方法
- 将两个文件放在同一个文件夹
- 使用浏览器直接打开
students.xml - XSLT引擎自动执行转换,最终渲染出HTML列表页面
出现乱码
- XML头部写了
encoding="ISO-8859-1",该字符集不支持非英文; - HTML meta标签编码和文件实际编码不一致;
- 文件保存时编辑器编码不是UTF-8;
展示完整学生信息
如果你想要同时展示姓名、年龄、身高,可以替换循环部分:
<xsl:for-each select="class/student">
<li>
Name: <xsl:value-of select="name"/> ,
Age: <xsl:value-of select="age"/> ,
Height: <xsl:value-of select="height"/>
</li>
</xsl:for-each>Code language: HTML, XML (xml)
