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

递归实现XSLT转换:XML转HTML嵌套列表问题求助

解决XML嵌套回复转HTML层级列表的XSLT问题

你的核心问题是没有为子节点包裹<ul>容器,导致层级结构无法生成。修改后的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="html" indent="yes"/> 
 <xsl:template match="items"> 
    <html> 
        <ul>
            <xsl:apply-templates select="item[@par_no=0]"/> 
        </ul>
    </html> 
 </xsl:template> 
 
 <xsl:template match="item">    
    <xsl:variable name="varNo" select="@no"/> 
    <li>
        <b><xsl:value-of select="@user"/></b>
        <xsl:text> says: </xsl:text>
        <xsl:value-of select="."/> 
        <!-- 检查当前item是否有子节点 -->
        <xsl:if test="//items/item[@par_no=$varNo]">
            <ul>
                <!-- 对所有子节点应用模板并排序 -->
                <xsl:apply-templates select="//items/item[@par_no=$varNo]"> 
                    <xsl:sort select="@no" data-type="number"/>                 
                </xsl:apply-templates> 
            </ul>
        </xsl:if>
    </li>   
 </xsl:template> 
</xsl:stylesheet>

关键改动说明:

  1. 添加子节点容器判断:在当前<li>内部,通过<xsl:if>检查是否存在以当前item的@no为父节点的子item,存在则输出<ul>包裹子节点
  2. 调整子节点应用位置:将子节点的<xsl:apply-templates>放到当前<li>内部,确保子列表是当前列表项的子元素,而非平级元素
  3. 修正排序字段:原代码按@par_no排序无实际意义,改为按@no排序,保证子节点按编号顺序展示
  4. 开启输出缩进:在<xsl:output>添加indent="yes",让生成的HTML结构更易读

转换后生成的HTML结构与你期望的完全一致,层级嵌套关系正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:18:13