简体   繁体   English

结合来自T-SQL的XML

[英]Combine XML from T-SQL

I have two separate tables TVs and Receivers that I am using the FOR XML PATH commands to build XML off of. 我有两个单独的表TV和Receivers,我使用FOR XML PATH命令来构建XML。 My issue is that I want to combine the output of my TV XML Build with my Receiver XML Build to create one XML output. 我的问题是我想将TV XML Build的输出与我的Receiver XML Build结合起来创建一个XML输出。

So I would have something like this(Which allows me to keep the TVs and Receivers Tags Separate within the FilterData Root): 所以我会有这样的东西(这使我能够在FilterData Root中保持电视和接收器标签分开):

<FilterData>
<TVs>
    <TV>
        <Type>LCD</Type>
        <Brand>Samsung</Brand>
    </TV>
    <TV>
        <Type>LCD</Type>
        <Brand>Panasonic</Brand>
    </TV>
</TVs>
<Receivers>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Onkyo</Brand>
    </Receiver>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Denon</Brand>
    </Receiver>
</Receivers>
</FilterData>

The problem is that when I build my queries to output this XML 问题是当我构建我的查询以输出这个XML时

Select
Type
,Brand
From dbo.TVs
FOR XML PATH('TV'),ROOT('TVS') TYPE

AND

Select
Type
,Brand
From dbo.Receivers
FOR XML PATH('Receiver'),ROOT('Receivers') TYPE

I am not sure how to combine these to look like the example: 我不知道如何将这些结合起来看起来像一个例子:

<FilterData>
<TVs>
    <TV>
        <Type>LCD</Type>
        <Brand>Samsung</Brand>
    </TV>
    <TV>
        <Type>LCD</Type>
        <Brand>Panasonic</Brand>
    </TV>
</TVs>
<Receivers>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Onkyo</Brand>
    </Receiver>
    <Receiver>
        <Type>Surround 7.1</Type>
        <Brand>Denon</Brand>
    </Receiver>
</Receivers>

Use: 使用:

 SELECT (SELECT t.type, t.brand
           FROM dbo.TVs t
        FOR XML PATH('tv'), ROOT('tvs'), ELEMENTS, TYPE),
       (SELECT r.type, r.brand
          FROM dbo.Receivers r
       FOR XML PATH('receiver'), ROOT('receivers'), ELEMENTS, TYPE)
FOR XML PATH('filterdata')

Tested using: 测试使用:

WITH tvs AS (
    SELECT 'LCD' AS type, 'Samsung' AS brand
    UNION ALL
    SELECT 'LCD' AS type, 'Panasonic' AS brand),
     receivers AS (
    SELECT 'Surround 7.1' AS type, 'Onkyo' AS brand
    UNION ALL
    SELECT 'Surround 7.1', 'Denon')
 SELECT (SELECT t.type, t.brand
           FROM tvs t
        FOR XML PATH('tv'), ROOT('tvs'), ELEMENTS, TYPE),
       (SELECT r.type, r.brand
          FROM receivers r
       FOR XML PATH('receiver'), ROOT('receivers'), ELEMENTS, TYPE)
FOR XML PATH('filterdata')
DECLARE @tvs TABLE
(
      [Type]    varchar(20) not null
    , [Brand]   varchar(50) not null
)

DECLARE @receivers TABLE
(
      [Type]    varchar(20) not null
    , [Brand]   varchar(50) not null
)

INSERT INTO @tvs([Type], [Brand]) Values('LCD', 'Samsung'), ('LCD', 'Panasonic');
INSERT INTO @receivers([Type], [Brand]) Values('Surround 7.1', 'Onkyo'), ('Surround 7.1', 'Dennon');



SELECT
    (
        SELECT
              [Type]
            , [Brand]
        FROM
            @tvs
        FOR XML PATH('TV'),ROOT('TVS'), TYPE
    )
    ,
    (
        SELECT
              [Type]
            , [Brand]
        FROM
            @receivers
        FOR XML PATH('Receiver'),ROOT('Receivers'), TYPE
    )
FOR XML PATH('FilterData');    

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM