You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用XSLT将DTD验证的XML按用户生成单个XHTML文件?

使用XSLT为每个用户生成单独的XHTML文件(结合for-each实现)

嗨,我来帮你搞定这个需求!要实现每个用户输出一个独立XHTML文件,你需要结合xsl:for-each遍历用户节点,再用XSLT 2.0及以上版本支持的xsl:result-document来生成单独文件——这是最直接的方案,下面给你完整的实现代码和细节解释:

完整XSLT转换代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 匹配根节点,开始处理 -->
    <xsl:template match="/">
        <!-- 遍历每个user节点 -->
        <xsl:for-each select="/store/users/user">
            <!-- 生成单独的XHTML文件,文件名用用户id区分 -->
            <xsl:result-document method="xhtml" href="user-{@id}.html" encoding="UTF-8">
                <html xmlns="http://www.w3.org/1999/xhtml">
                    <head>
                        <meta charset="UTF-8"/>
                        <title>用户信息:<xsl:value-of select="name"/></title>
                    </head>
                    <body>
                        <h1>用户详情</h1>
                        <div>
                            <p><strong>用户ID:</strong><xsl:value-of select="@id"/></p>
                            <p><strong>用户名:</strong><xsl:value-of select="name/@username"/></p>
                            <p><strong>真实姓名:</strong><xsl:value-of select="name"/></p>
                            <p><strong>邮箱:</strong><xsl:value-of select="email"/></p>
                            <p><strong>手机号:</strong><xsl:value-of select="mob_number"/></p>
                            <p><strong>地址:</strong><xsl:value-of select="address"/></p>
                        </div>
                    </body>
                </html>
            </xsl:result-document>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

关键部分解释

  • XSLT版本声明:必须指定version="2.0",因为xsl:result-document是2.0新增的功能,常用的处理器比如Saxon完全支持这个版本。
  • xsl:for-each遍历:select="/store/users/user"会选中所有用户节点,循环体里的代码会对每个用户执行一次。
  • 生成独立文件:xsl:result-document的href属性定义输出文件名,这里用user-{@id}.html,会生成比如user-user1.html、user-user2.html这样的文件,确保每个文件唯一。
  • XHTML内容构建:在xsl:result-document内部,你可以像写普通XHTML一样构建页面,用xsl:value-of提取用户的各个字段值,包括属性(比如name/@username是取name节点的username属性)。

运行方式

你需要用支持XSLT 2.0的处理器来执行转换,比如Saxon:

# 假设你的XML文件叫input.xml,XSLT文件叫transform.xsl
java -jar saxon9he.jar -s:input.xml -xsl:transform.xsl

执行后,你会在当前目录下看到每个用户对应的XHTML文件。

注意事项

如果你的环境只能用XSLT 1.0,那没法直接生成多个文件,需要借助处理器的扩展功能(比如Xalan的exslt:document)或者其他工具,但还是推荐用XSLT 2.0+,实现起来更简洁可靠。

内容的提问来源于stack exchange,提问作者Arman Freitas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:39:28