对于 xml 显式处理命名空间

for xml explicit dealing with namespace

我正在尝试查询 explicit xml。为此,我必须使用 namespace。这是一个简化版本:

SELECT 1                   as Tag,  
       NULL                as Parent,  
       i.SSN               as [SSN!1]
FROM   IRS_Table  as i
for xml explicit

但我希望 xml 看起来像这样:

<irs:SSN>999-99-9999</irs:SSN>

这里是开始标签中命名空间的声明:

xmlns:irs="urn:us:gov:treasury:irs:common"

如何修改脚本以便在输出命名空间中看到?

编辑

    <?xml version="1.0" encoding="utf-8"?>
    <n1:Form109495CTransmittalUpstream xmlns:irs="urn:us:gov:treasury:irs:common">
        <irs:SSN>999-99-9999</irs:SSN>
    </n1:Form109495CTransmittalUpstream>

您可以使用以下查询将命名空间包含到for xml explicit输出中。

SELECT 1                   as Tag,  
       NULL                as Parent,  
       i.SSN               as [irs:SSN!1],
       'urn:us:gov:treasury:irs:common' as [irs:SSN!1!xmlns:irs] --namespace is here
FROM   IRS_Table as i
for xml  explicit

更新

使用 for xml path 构造可能更容易。

;with xmlnamespaces('urn:us:gov:treasury:irs:common' as irs,
                    'blahblah' as n1,
                     default 'blahblah:blah' )
SELECT  
       null as [n1:Form109495CTransmittalUpstream], 
       ssn  as [n1:Form109495CTransmittalUpstream/irs:SSN]
FROM   IRS_Table as i
for xml path(''), elements, root