我可以查询 XML,它定义了带有公共表表达式的xmlns标记
DECLARE @XML XML
SET @XML =
'<NodeA xmlns="https://XYZ.xsd">
<NodeB verzePis="">
<NodeC1 attrA="Hello" />
<NodeC2 attrA="World" />
</NodeB>
</NodeA>
'
;WITH XMLNAMESPACES(DEFAULT 'https://XYZ.xsd')
SELECT
r.value('fn:local-name(.)', 'nvarchar(50)') as SectionName,
r.value('@attrA','NVARCHAR(250)') attrA
FROM @XML.nodes('/NodeA/NodeB/*') AS t(r);
但是如果源 XML 不包含任何 xmlns 标记怎么办?我该如何解决缺少命名空间的问题?
您可以删除该
WITH XMLNAMESPACES(DEFAULT 'https://XYZ.xsd')
部分:生产
请注意,
WITH XMLNAMESPACES
不创建公用表表达式,它只是声明一个可选的命名空间