我正在尝试使用T-SQL生成一个XML文件,在根节点中使用默认命名空间,但在子节点中没有定义命名空间。
DECLARE @xmlData XML
DECLARE @xmlInner XML
SELECT @xmlInner =
(
SELECT * FROM dbo.GH_DATA_BS_EVLTN_MNTH_ANL [r]
FOR XML PATH('r'), TYPE
)
;WITH XMLNAMESPACES (DEFAULT 'http://www.testnamespace.com')
SELECT @xmlData =
(
SELECT '2012-10-25T14:13:00Z' as "@DataFeedDate",@xmlInner
FOR XML PATH('root')
)
SELECT @xmlData
上面的脚本生成以下XML文件
<root xmlns="http://www.testnamespace.com" DataFeedDate="2012-10-25T14:13:00Z">
<r xmlns="">
<RPRT_DT_CD>2012-10-25T14:15:00-05:00</RPRT_DT_CD>
<RPRT_MO_CD>2013-01</RPRT_MO_CD>
<RPRT_EV_CD>1</RPRT_EV_CD>
</r>
</root>
问题是标记包含空命名空间xmlns =“”但是预期的结果是简单地没有定义命名空间。
答案 0 :(得分:0)
唯一的解决方法是改变:
;WITH XMLNAMESPACES (DEFAULT 'http://www.testnamespace.com')
要
;WITH XMLNAMESPACES ('http://www.testnamespace.com' as anySuffix)
答案 1 :(得分:-1)
您可以使用UDF执行此操作。示例如下:
ALTER FUNCTION [dbo].[udf_get_child_section] (
@serviceHeaderId INT
)
RETURNS XML
BEGIN
DECLARE @result XML;
SELECT @result =
(
SELECT 1 AS 'ChildElement'
FOR XML PATH('Child')
)
RETURN @result
END
GO
DECLARE @Ids TABLE
(
ID int
)
INSERT INTO @Ids
SELECT 1 AS ID
UNION ALL
SELECT 2 AS ID
;WITH XMLNAMESPACES (DEFAULT 'http://www...com/content')
SELECT
[dbo].[udf_get_child_section](ID)
FROM
@Ids
FOR XML PATH('Parent')
结果:
<Parent xmlns="http://www...com/content">
<Child xmlns="">
<ChildElement>1</ChildElement>
</Child>
</Parent>
<Parent xmlns="http://www...com/content">
<Child xmlns="">
<ChildElement>1</ChildElement>
</Child>
</Parent>