使用 FOR XML EXPLICIT 时删除 xmlns="" name space 声明
Remove xmlns="" name space declaration when using FOR XML EXPLICIT
我正在使用 FOR XML EXPLICIT
:
生成 XML 文档
declare @MyTable table (value xml);
insert into @MyTable values
('<foo bar="data1">content1</foo>')
,('<foo bar="data2">content2</foo>')
,('<foo bar="data3">content3</foo>');
select 1 as Tag, null as Parent
, value as [x!1!!xml]
from @MyTable
for xml explicit;
并得到这样的回应:
<x>
<foo bar="data1" xmlns="">content1</foo>
</x>
<x>
<foo bar="data2" xmlns="">content2</foo>
</x>
<x>
<foo bar="data3" xmlns="">content3</foo>
</x>
问题是我不需要 xmlns
属性。
我找到了一个解决方案,但它似乎是一个问题。
select 1 as Tag, null as Parent
, cast (value as varchar(200)) as [x!1!!xml]
from @MyTable
for xml explicit;
有没有更优雅的解决方法?
不提供使用 FOR XML PATH/RAW/AUTO
。
EXPLICIT
模式是必须的。
如果根元素名称(即问题示例数据中的 foo
)在所有行中都相同,则有一个简单的方法可以实现此目的:
在列名称中指定 AttributeName 项(第 3 项)。就示例数据而言,这将是 foo
.
使用xmltext
指令(第4项)代替xml
。
列名将是:
[x!1!foo!xmltext]
完整的查询是:
SELECT 1 AS [Tag], NULL AS [Parent]
, value AS [x!1!foo!xmltext]
FROM @MyTable
FOR XML EXPLICIT;
但如果根元素名称确实不同,则上述方法不是一个选项,似乎唯一的方法是将 XML 数据转换为 NVARCHAR
(比VARCHAR
因为 XML
和 NVARCHAR
都是 UTF-16):
SELECT 1 AS [Tag], NULL AS [Parent]
, CONVERT(NVARCHAR(MAX), value) AS [x!1!!xml]
FROM @MyTable
FOR XML EXPLICIT;
有关详细信息,请参阅 Use EXPLICIT Mode with FOR XML 的 MSDN 页面。
我正在使用 FOR XML EXPLICIT
:
declare @MyTable table (value xml);
insert into @MyTable values
('<foo bar="data1">content1</foo>')
,('<foo bar="data2">content2</foo>')
,('<foo bar="data3">content3</foo>');
select 1 as Tag, null as Parent
, value as [x!1!!xml]
from @MyTable
for xml explicit;
并得到这样的回应:
<x>
<foo bar="data1" xmlns="">content1</foo>
</x>
<x>
<foo bar="data2" xmlns="">content2</foo>
</x>
<x>
<foo bar="data3" xmlns="">content3</foo>
</x>
问题是我不需要 xmlns
属性。
我找到了一个解决方案,但它似乎是一个问题。
select 1 as Tag, null as Parent
, cast (value as varchar(200)) as [x!1!!xml]
from @MyTable
for xml explicit;
有没有更优雅的解决方法?
不提供使用 FOR XML PATH/RAW/AUTO
。
EXPLICIT
模式是必须的。
如果根元素名称(即问题示例数据中的 foo
)在所有行中都相同,则有一个简单的方法可以实现此目的:
在列名称中指定 AttributeName 项(第 3 项)。就示例数据而言,这将是
foo
.使用
xmltext
指令(第4项)代替xml
。
列名将是:
[x!1!foo!xmltext]
完整的查询是:
SELECT 1 AS [Tag], NULL AS [Parent]
, value AS [x!1!foo!xmltext]
FROM @MyTable
FOR XML EXPLICIT;
但如果根元素名称确实不同,则上述方法不是一个选项,似乎唯一的方法是将 XML 数据转换为 NVARCHAR
(比VARCHAR
因为 XML
和 NVARCHAR
都是 UTF-16):
SELECT 1 AS [Tag], NULL AS [Parent]
, CONVERT(NVARCHAR(MAX), value) AS [x!1!!xml]
FROM @MyTable
FOR XML EXPLICIT;
有关详细信息,请参阅 Use EXPLICIT Mode with FOR XML 的 MSDN 页面。