当我运行我的查询时,命名空间添加了根元素但是第二个元素我也有xmlns =“”...我想删除它...我需要添加名称空间前缀到一些元素。
我提供了一个例子:
declare @xml_h as xml
declare @xml_d as xml
select @xml_h = (
select NewID() as [UID]
for XML PATH('Head')
)
select @xml_d = (
select NULL,
(
select 'V00001' as [ID],
'Some name' as [Name]
for XML PATH('SubData'), TYPE
)
for XML PATH('Data')
)
;with XmlNameSpaces (DEFAULT 'uri_1', 'uri_2' as t)
select @xml_h, @xml_d for XML PATH(''), ROOT('ROOT')
结果是:
<ROOT xmlns:t="uri_2" xmlns="uri_1">
<Head xmlns="">
<UID>B12B8836-2061-4934-AC06-67D34579D1A6</UID>
</Head>
<Data xmlns="">
<SubData>
<ID>V00001</ID>
<Name>Some name</Name>
</SubData>
</Data>
</ROOT>
但我需要这个:
<ROOT xmlns:t="uri_2" xmlns="uri_1">
<Head>
<t:UID>B12B8836-2061-4934-AC06-67D34579D1A6</t:UID>
</Head>
<Data>
<t:SubData>
<t:ID>V00001</t:ID>
<t:Name>Some name</t:Name>
</t:SubData>
</Data>
</ROOT>
有没有办法删除不必要的空白名称空间并添加名称空间前缀?
感谢
答案 0 :(得分:0)
这将构建一个与您想要的XML相同的XML。
declare @xml_h as xml
declare @xml_d as xml
;with XmlNameSpaces (DEFAULT 'uri_1', 'uri_2' as t)
select @xml_h = (
select NewID() as [t.UID]
for XML PATH('Head')
)
;with XmlNameSpaces (DEFAULT 'uri_1', 'uri_2' as t)
select @xml_d = (
select NULL,
(
select 'V00001' as [t.ID],
'Some name' as [t.Name]
for XML PATH('t.SubData'), TYPE
)
for XML PATH('Data')
)
;with XmlNameSpaces (DEFAULT 'uri_1', 'uri_2' as t)
select @xml_h, @xml_d for XML PATH(''), ROOT('ROOT')
<ROOT xmlns:t="uri_2" xmlns="uri_1">
<Head xmlns:t="uri_2" xmlns="uri_1">
<t.UID>ABBECBF4-59BE-46DF-B42E-4325748E0079</t.UID>
</Head>
<Data xmlns:t="uri_2" xmlns="uri_1">
<t.SubData xmlns:t="uri_2" xmlns="uri_1">
<t.ID>V00001</t.ID>
<t.Name>Some name</t.Name>
</t.SubData>
</Data>
</ROOT>
正如您所看到的,在子元素中重复了名称空间声明。如果您确实遇到问题,可以重写查询以使用EXPLICIT Mode,也可以将您的投票添加到this connect item,并希望它成为未来SQL Server版本的一部分。< / p>