我正在使用生成XML文档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
,Question中的示例数据)在所有行中都相同,则有一种简单的方法可以完成此操作:
在列名称中指定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;
有关更多信息,请参见MSDN页面上的FOR EXPLICIT Mode和FOR XML一起使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句