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

如何为SQL 'FOR XML'生成的HTML标签添加class类名及自定义内嵌结构

解决方案

你只需修改自定义函数和外层查询的XML字段映射规则即可,调整后的代码如下:

1. 修改自定义函数

CREATE FUNCTION dbo.fn_menuXML( @IDMenuParent INT )
RETURNS XML
WITH RETURNS NULL ON NULL INPUT 
BEGIN RETURN 
(
SELECT 
    NavigateUrl AS "a/@href", 
    'collapse' AS "a/@class",
    -- 如果要使用表中存储的ImageUrl,把下方固定路径替换为 ImageUrl 字段即可
    'images/dashboard-normal.png' AS "a/i/img/@src",
    DisplayText AS "a/span",
    CASE WHEN EXISTS(SELECT 1 FROM SFM_Menu WHERE MenuParentID = MenuID AND IsActive=1)
        THEN dbo.fn_menuXML( MenuID )
    END
    FROM SFM_Menu
    WHERE MenuParentID = @IDMenuParent
        AND IsActive=1
    ORDER BY DisplayOrder
    FOR XML PATH('li'), ROOT('ul'), TYPE
)
END
GO

2. 修改外层查询语句

SELECT 
    NavigateUrl AS "a/@href", 
    'collapse' AS "a/@class",
    -- 同上,可替换为 ImageUrl 字段使用表中存储的图片路径
    'images/dashboard-normal.png' AS "a/i/img/@src",
    DisplayText AS "a/span",
    dbo.fn_menuXML(MenuID)
FROM SFM_Menu
WHERE MenuParentID =0 
    AND IsActive=1
ORDER BY DisplayOrder
FOR XML PATH('li'), ROOT('ul'), TYPE

核心改动说明

  • 新增'collapse' AS "a/@class"给a标签添加指定class属性
  • 新增'images/dashboard-normal.png' AS "a/i/img/@src"生成包裹在i标签内的img节点
  • 将原来直接映射到a节点的DisplayText改为DisplayText AS "a/span",让菜单文本包裹在span标签内
  • 函数内新增IsActive过滤条件,避免生成已禁用的子菜单,同时调整子菜单判断逻辑,仅存在有效子菜单时才递归生成ul节点

运行上述代码即可生成你要求的HTML结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:57:00