xml - 带有 FOR XML PATH 的默认命名空间

标签 xml t-sql for-xml-path

考虑以下 SQL:

;WITH XMLNAMESPACES(DEFAULT 'http://www.mynamespace.co.uk')
,CTE_DummyData AS (
    select id=1
)
select TOP 1
    [@ID]=1,
    (select top 1 [@ID] = 1 FROM CTE_DummyData FOR XML PATH ('Child'), TYPE)
from CTE_DummyData
FOR XML PATH ('Parent')

Thie 返回 xml:

<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
  <Child xmlns="http://www.mynamespace.co.uk" ID="1" />
</Parent>

我需要的是仅在根元素上返回带有 xmlns 声明的 xml。例如:

<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
  <Child ID="1" />
</Parent>

有办法做到这一点吗?

注意: 上面的 SQL 是实际代码的极端简化,它会生成一个复杂的文档,因此如果不给我几天的额外工作要做,从 FOR XML PATH 进行更改并不是一个真正的选择。需要明确的是,整个文档的顶层都需要有 NS,而所有子级都应该没有。

最佳答案

您可以使用"query from hell"

;with CTE_DummyData AS (
    select id=1
)
select 1 as tag,
       0 as parent,
       'http://www.mynamespace.co.uk' as [Parent!1!xmlns],
       id as [Parent!1!ID],
       null as [Child!2!ID]
from CTE_DummyData       
union all
select top 1
       2,
       1,
       null,
       null,
       id
from CTE_DummyData       
for xml explicit

关于xml - 带有 FOR XML PATH 的默认命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751631/

相关文章:

sql-server - SQL 服务器 : Group by string concatenation

sql - CDATA 部分真的没有必要吗?

php - 如何在使用 php 和 mysql 的同时为我们自己的动态站点创建 rss 提要 (.xml)?

java - 使用 Canvas 和 Framelayout android 绘制圆圈

t-sql - 仅按特定条件计数

sql-server - 在sql server中将 “&lt;”和 “&gt;”替换为 “<”和 “>”

java - 如何在我的 Activity map 中添加按钮?

javascript - 实体名称必须紧跟实体引用中的 '&'

sql-server-2005 - 在SQL Server中,为什么所有数据库中都有重复的DMV?例如sys.databases

sql-server - TSQL - 更好的 INT 转换函数