首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用XML构造XML

使用XML构造XML
EN

Stack Overflow用户
提问于 2013-12-30 17:00:47
回答 1查看 74关注 0票数 0

我正在尝试使用FOR XML从一个SQL查询返回XML,而且我已经快到了,除了我似乎无法将它转换成我所需要的确切格式。

以下是我到目前为止构建的声明:

代码语言:javascript
复制
SELECT TOP 1 
  ID AS '@id'
  ,1 AS '@version'
  ,'en' AS '@lang'
  ,'Joe Smith' AS 'field/Name'
  ,'email@add.com' AS 'field/Email' 
FROM Table
FOR XML PATH ('add')

它返回的XML格式:

代码语言:javascript
复制
<add id="123" version="1" lang="en">
  <field>
    <Name>Joe Smith</Name>
    <Email>email@add.com</Email>
  </field>
</add>

我怎么需要它回来:

代码语言:javascript
复制
<add id="123" version="1" lang="en">
  <field name="Name">Joe Smith</field>
  <field name="Email">email@add.com</field>
</add>

我如何做到这一点,到目前为止,这是我在网上找到的文档中得到的最远的一次。请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-30 17:26:12

1)

代码语言:javascript
复制
SELECT TOP 1 
  ID AS '@id'
  ,1 AS '@version'
  ,'en' AS '@lang'
  ,(
    SELECT  x.Attribute AS  '@name',
            x.Value     AS  'text()'
    FROM    (VALUES (N'Name', N'Joe Smith'), (N'Email', N'email@add.com')) x(Attribute,Value)
    FOR XML PATH('field'), TYPE
  )
FROM (SELECT 1 ID) AS Table1
FOR XML PATH ('add')

2)第二种解决方案使用模板和变量。我之所以提出这个解决方案,是因为我看到了TOP 1 (最多一行)。首先,您应该将该行中的值转换为变量(SELECT @Variable = Column, ... FROM Table)。您有更大的灵活性,但是性能可能会受到的影响(注意:我没有做任何测试)。

代码语言:javascript
复制
DECLARE 
    @ID INT = 1,
    @Version INT = 1,
    @Lang NVARCHAR(10) = N'en',
    @Name NVARCHAR(50) = N'Joe Smith',
    @Email NVARCHAR(100) = N'email@add.com'

DECLARE @x XML = N'';
SELECT @x.query(N'
<add id="{sql:variable("@ID")}" version="{sql:variable("@Version")}" lang="{sql:variable("@Lang")}">
  <field name="Name">{sql:variable("@Name")}</field>
  <field name="Email">{sql:variable("@Email")}</field>
</add>
');
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20844004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档