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

在SQL Server 2019中列出带命名空间前缀的所有XML节点

在SQL Server 2019中显示带命名空间前缀的XML节点

可以实现,只需要在查询中获取节点的命名空间前缀并与节点名称拼接即可。SQL Server的XQuery支持prefix-from-QName(.)函数提取节点前缀,结合local-name(.)就能得到带前缀的完整节点名。

修改后的查询代码如下:

DECLARE @xml xml;
SET @xml = '<Order xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Order-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<cbc:CustomizationID>urn:fdc:peppol.eu:poacc:trns:order:3</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:poacc:bis:ordering:3</cbc:ProfileID>
<cbc:ID>1513999</cbc:ID>
</Order>';

WITH XMLNAMESPACES(
    DEFAULT 'urn:oasis:names:specification:ubl:schema:xsd:Order-2'
    ,'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2' AS cac
    ,'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2' AS cbc
)
SELECT 
    CASE 
        WHEN C.value('prefix-from-QName(.)', 'VARCHAR(MAX)') IS NOT NULL AND C.value('prefix-from-QName(.)', 'VARCHAR(MAX)') <> ''
        THEN CONCAT(C.value('prefix-from-QName(.)', 'VARCHAR(MAX)'), ':', C.value('local-name(.)', 'VARCHAR(MAX)'))
        ELSE C.value('local-name(.)', 'VARCHAR(MAX)')
    END AS node_name
FROM @xml.nodes('/Order/*') AS T(C);

关键说明:

  • prefix-from-QName(.):提取当前节点的命名空间前缀(比如示例中的cbc)
  • CONCAT函数:将前缀、冒号和节点名称拼接成完整的带前缀节点名
  • CASE语句:处理无前缀的节点(比如默认命名空间下的节点),避免出现多余的冒号

执行该查询后,返回结果会显示:

node_name
-------------------
cbc:CustomizationID
cbc:ProfileID
cbc:ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:32:35