2

与以下

DECLARE @t TABLE (Test nvarchar(50), Location_ID uniqueidentifier);
INSERT INTO @t (Test,Location_ID ) 
SELECT Test,Location_ID 
from
dbo.TEST;
DECLARE @xml XML
;WITH XMLNAMESPACES (
'typens:GPCodedValueDomain2' as type,
'http://www.esri.com/schemas/ArcGIS/10.0' as typens, 
'http://www.w3.org/TR/html4/' AS xs, 
'http://www.w3.org/2001/XMLSchema-instance' AS xsi )
SELECT @xml = 
    (
    SELECT 
    'typens:CodedValue' AS "@xsi:type", 
    TEST AS "Name", Location_ID  AS "Code"
    FROM @t 
    order by Location_ID
    FOR XML PATH
    ('CodedValue'), ROOT
    ('GPCodedValueDomain2'),TYPE
    )
SELECT @xml

它输出

<GPCodedValueDomain2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/TR/html4/" xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.0" xmlns:type="typens:GPCodedValueDomain2">
  <CodedValue xsi:type="typens:CodedValue">
    <Name>test update</Name>
    <Code>B59D3BEB-CBCE-E111-B5B0-002564D275D1</Code>
  </CodedValue>
  <CodedValue xsi:type="typens:CodedValue">
    <Name>test update</Name>
    <Code>B69D3BEB-CBCE-E111-B5B0-002564D275D1</Code>
  </CodedValue>
  <CodedValue xsi:type="typens:CodedValue">
    <Name>test update</Name>
    <Code>B79D3BEB-CBCE-E111-B5B0-002564D275D1</Code>
  </CodedValue>
</GPCodedValueDomain2>

几个小时以来,我一直在尝试不同的命名空间定义迭代,但都失败了。我正在寻找的输出是:

<GPCodedValueDomain2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/TR/html4/" xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.0" xmlns:type="typens:GPCodedValueDomain2">
  <CodedValue xsi:type="typens:CodedValue">
    <Name>test update</Name>
    <Code xsi:type="xs:string">B59D3BEB-CBCE-E111-B5B0-002564D275D1</Code>
  </CodedValue>
  <CodedValue xsi:type="typens:CodedValue">
    <Name>test update</Name>
    <Code xsi:type="xs:string">B69D3BEB-CBCE-E111-B5B0-002564D275D1</Code>
  </CodedValue>
  <CodedValue xsi:type="typens:CodedValue">
    <Name>test update</Name>
    <Code xsi:type="xs:string">B79D3BEB-CBCE-E111-B5B0-002564D275D1</Code>
  </CodedValue>
</GPCodedValueDomain2>

关于如何实现这一点的任何想法?谢谢

4

1 回答 1

1

我不是 SQL Server 用户,但我想知道您是否真的提供了一个模式文档,该文档定义了string在 namespace 中命名的类型http://www.w3.org/TR/html4/

xs将前缀绑定到名称为 HTML 4 规范的 URI 的命名空间绝对没有错。但是有几件事让我想知道你是否已经足够清楚地定义了你的问题。

  • HTML 4 规范没有定义名为string;的数据类型。除非您在此处未显示的模式文档中做一些非常不寻常的事情,否则xs:string不会表示已知类型。
  • 您似乎将命名空间前缀绑定到命名type空间 URI typens:GPCodedValueDomain2。该名称空间前缀似乎没有在其他任何地方使用,因此尚不清楚它的用途是什么。该名称空间名称中使用的 URI 方案typens也是在查询中其他地方定义的名称空间前缀这一事实表明,您要么对名称空间和名称空间前缀感到困惑,要么您正在做一些极其微妙和狡猾的事情。在后一种情况下,您肯定不需要 Stack Overflow 的帮助。
  • 您需要输出中的and元素的xsi:type属性。您的查询成功地将属性放在第一个,通过指定它。但是该元素没有类似的构造。为什么不?CodedValueCodeSELECT 'typens:CodedValue' AS "@xsi:type", ...Code
于 2012-09-14T01:47:26.443 回答