XSLT例子

XML + XSLT 转换HTML 完整示例

准备两份文件:

  1. students.xml:原始数据XML文档,存放学生信息
  2. 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转换当前XML
  • encoding="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)

核心语法解释

  1. <xsl:stylesheet>:XSLT根标签,声明命名空间
  2. <xsl:template match="/">:匹配XML根节点,转换入口
  3. <xsl:for-each select="class/student">:遍历每一个学生节点
  4. <xsl:value-of select="name"/>:取出<name>节点文本内容

3、运行方法

  1. 将两个文件放在同一个文件夹
  2. 使用浏览器直接打开 students.xml
  3. XSLT引擎自动执行转换,最终渲染出HTML列表页面
出现乱码
  1. XML头部写了 encoding="ISO-8859-1",该字符集不支持非英文;
  2. HTML meta标签编码和文件实际编码不一致;
  3. 文件保存时编辑器编码不是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)

Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注