在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
相关产品推荐
相关产品推荐

