如何使用 With XMLNamespaces 在 SQL 中创建自定义名称空间?
How do I use With XMLNamespaces to create custom name spaces in SQL?
我希望能够为 XML 根元素生成以下命名空间和类型
<BaseTransactionRequest xmlns="http://schemas.datacontract.org/2004/07/SomeCompany" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" i:type="AType">
通常前 2 个(即不包括 i:type="AType")可以毫无问题地生成(有一些权衡,当使用自定义命名空间时,我们不能使用 xmlns:ni 命名空间等)
所以,后一种类型是有问题的。对于推荐人,
WITH XMLNAMESPACES fearure 的用法如下(FOR XML 部分省略):
;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as i, DEFAULT 'http://schemas.datacontract.org/2004/07/SomeCompany',
要克服的解决方案是使用字符串连接编写 XML "literally"。但是我相信并希望FOR XML和这个可以一起使用。
编辑:第一次剪辑是在匆忙中添加的。道歉。
EDIT2:阅读障碍修复
你的问题不是很清楚...你可能对你的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" />
我希望能够为 XML 根元素生成以下命名空间和类型
<BaseTransactionRequest xmlns="http://schemas.datacontract.org/2004/07/SomeCompany" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" i:type="AType">
通常前 2 个(即不包括 i:type="AType")可以毫无问题地生成(有一些权衡,当使用自定义命名空间时,我们不能使用 xmlns:ni 命名空间等) 所以,后一种类型是有问题的。对于推荐人, WITH XMLNAMESPACES fearure 的用法如下(FOR XML 部分省略):
;WITH XMLNAMESPACES ('http://www.w3.org/2001/XMLSchema-instance' as i, DEFAULT 'http://schemas.datacontract.org/2004/07/SomeCompany',
要克服的解决方案是使用字符串连接编写 XML "literally"。但是我相信并希望FOR XML和这个可以一起使用。
编辑:第一次剪辑是在匆忙中添加的。道歉。 EDIT2:阅读障碍修复
你的问题不是很清楚...你可能对你的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" />