我有这个疑问
WITH XMLNAMESPACES(DEFAULT 'https://tribunet.hacienda.go.cr /docs/esquemas/2017/v4.2/facturaElectronica'
,'http://www.w3.org/2001/XMLSchema' AS xsd
,'http://www.w3.org/2001/XMLSchema-instance' AS xsi)
SELECT 1 AS [id]
,0 AS [pass]
(
/*Others*/
SELECT
OT.OTH_MESSAGE as Others
FROM [crdx_COREDev1].[dbo].[OTH_OTHERS] as OT
where
OT.OTH_ID=E.OTH_ID
fOR XML PATH ('Others'), type
)
,0 AS [CONSECUTIVE]
FOR XML PATH('FE');
这会生成此 XML
<FE xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2 /facturaElectronica"> <- CHANGE 2
<id>1</id>
<pass>0</pass>
<CONSECUTIVE>0</CONSECUTIVE>
<Others xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2 /facturaElectronica">
<MESSAGE>MESSAGE</MESSAGE>
</Others>
</FE>
现在我的问题:我只想用
<FE>
显示命名空间,但是 - 正如您在 xml 中看到的 - 声明也出现在 <Others>
中。我怎样才能将其限制为<FE>
?
这是一个恼人且众所周知的问题,每当您在
FOR XML
查询中使用与嵌套子查询相关的命名空间时,就会发生...
连接问题已存在 10 多年 - 直到最近消失。
值得一提的是,这些重复的命名空间声明并没有错,只是让你的 XML 变得臃肿。它可能与严格的模式验证发生冲突。
没有好的解决方案,只有解决方法:
xmlns
)并使用 REPLACE
更改名称。两种解决方法都需要转换为
NVARCHAR(MAX)
再转换回 XML
。
我真的不知道,为什么要这样实现......
查找一些相关示例
注意:
xmlns="https://tribunet.hacienda.go.cr/docs/esquemas/2017/v4.2 /facturaElectronica">
您正在使用带空格的命名空间 URL。这是不允许的...