如何使用XMLNamespaces在SQL中创建自定义名称空间?

时间:2018-03-20 22:49:44

标签: sql-server xml tsql xml-namespaces for-xml

我希望能够为XML根元素生成以下名称空间和类型

<BaseTransactionRequest xmlns="http://schemas.datacontract.org/2004/07/SomeCompany" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" i:type="AType">

通常前两个(即不包括i:type =&#34; AType&#34;)可以毫无问题地生成(有一些权衡,当使用自定义命名空间时,我们无法使用xmlns:ni命名空间表示空值等等) 因此,后一种类型存在问题。对于一个参考者, 如下所示使用WITH XMLNAMESPACES恐惧(省略FOR XML部分):

;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as i, DEFAULT 'http://schemas.datacontract.org/2004/07/SomeCompany',

要克服的解决方案是编写XML&#34;字面意思&#34;使用字符串连接。但我相信并希望FOR XML可以和它一起使用。

编辑:第一次切入是真正的加入。道歉。 EDIT2:Dyslexic fix

1 个答案:

答案 0 :(得分:1)

你的问题不是很明确......你可能对你的i:type="AType"有误解。这不是命名空间(无论自定义命名空间是什么),而是名为type的普通属性,位于您的命名空间i中,这是在xmlns:i="blah"宣布。

试试这个

WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as i
                   ,DEFAULT 'http://schemas.datacontract.org/2004/07/SomeCompany')
SELECT 'AType' AS [@i:type]
FOR XML PATH('BaseTransactionRequest');

结果是一个自闭标签,声明两个名称空间并包含您的属性:

<BaseTransactionRequest xmlns="http://schemas.datacontract.org/2004/07/SomeCompany" 
                        xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
                        i:type="AType" />