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

SQL Server中导入解析XSLT文件,提取指定节点值

处理XSLT文件导入SQL Server的查询语句

XSLT文件自带xsl标准命名空间,必须在SQL查询中声明该命名空间才能正确解析节点。以下是针对常见XSLT结构的查询实现:

假设你的XSLT结构示例

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <DataItem>
      <AType>User</AType>
      <SGroup>Admin</SGroup>
      <QID>Q_001</QID>
      <RID>R_001</RID>
      <RData>
        <xsl:value-of select="DbSchema.UserInfo/UserName"/>
        <xsl:value-of select="DbSchema.UserInfo/Email"/>
      </RData>
    </DataItem>
  </xsl:template>
</xsl:stylesheet>

对应的SQL查询语句

假设你已将XSLT文件存储在表LegacyXSLTFiles的XSLTContent列(XML类型)中:

-- 声明XML命名空间,包含XSLT标准命名空间和默认命名空间
WITH XMLNAMESPACES (
    DEFAULT '',
    'http://www.w3.org/1999/XSL/Transform' AS xsl
)
SELECT
    -- 提取基础节点的文本值
    Item.value('(AType/text())[1]', 'NVARCHAR(100)') AS AType,
    Item.value('(SGroup/text())[1]', 'NVARCHAR(100)') AS SGroup,
    Item.value('(QID/text())[1]', 'NVARCHAR(100)') AS QID,
    Item.value('(RID/text())[1]', 'NVARCHAR(100)') AS RID,
    -- 提取RData下所有xsl:value-of的select属性值(多值用逗号分隔)
    STUFF(
        (
            SELECT ', ' + ValueOfNode.value('@select', 'NVARCHAR(255)')
            FROM Item.nodes('RData/xsl:value-of') AS ValueOf(ValueOfNode)
            FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)'),
        1, 2, ''
    ) AS RData_SelectAttributes
FROM
    LegacyXSLTFiles
CROSS APPLY
    -- 根据实际XSLT结构调整节点路径,此处匹配xsl:template下的DataItem节点
    XSLTContent.nodes('//xsl:template/DataItem') AS T(Item)

调整说明

  • 若目标节点(AType、SGroup等)所在层级不同,修改nodes()中的XPath路径即可,比如节点直接在xsl:stylesheet下,改为XSLTContent.nodes('//DataItem')
  • 若RData下只有单个xsl:value-of标签,可简化为Item.value('(RData/xsl:value-of/@select)[1]', 'NVARCHAR(255)'),无需使用STUFF拼接
  • 若XSLT包含其他自定义命名空间,需在XMLNAMESPACES块中添加对应声明,例如'http://your-custom-namespace.com' AS ns,后续XPath中用ns:节点名访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:22:49