1

テーブルから特別にフォーマットされたXMLファイルにデータをエクスポートしたい。私はXMLファイルにかなり慣れていないので、私が求めているものは非常に明白かもしれませんが、ネット上で探しているものを見つけることができません。

必要なXML結果の形式は次のとおりです。

    <data>
        <event 
            start="May 28 2006 09:00:00 GMT"
            end="Jun 15 2006 09:00:00 GMT"
            isDuration="true"
            title="Writing Timeline documentation"
            image="http://simile.mit.edu/images/csail-logo.gif">
            A few days to write some documentation
        </event>
     </data>

私のテーブル構造は次のとおりです。

name VARCHAR(50),
description VARCHAR(255),
startDate DATETIME,
endDate DATETIME

(現時点では、XMLフィールドの画像やisDurationにはあまり興味がありません)。

私が試してみました:

SELECT [name]
           ,[description]
           ,[startDate]
           ,[endTime]

  FROM [testing].[dbo].[time_timeline]
  FOR XML RAW('event'), ROOT('data'), type

それは私に与えます:

<data>
    <event name="Test1" 
           description="Test 1 Description...." 
           startDate="1900-01-01T00:00:00" 
           endTime="1900-01-01T00:00:00" 
    />
    <event name="Test2" 
           description="Test 2 Description...." 
           startDate="1900-01-01T00:00:00" 
           endTime="1900-01-01T00:00:00" 
    />
</data>

私が見逃しているのは、説明がイベント属性の外にある必要があり、タグが必要であるということです。

誰かが私を正しい方向に向けたり、これを達成する方法についてのチュートリアルなどを教えてくれますか?

ありがとう、

マット

4

2 に答える 2

2

これでうまくいくはずです:

SELECT
    name "event/@name"
    , startDate "event/@start"
    , description "event"
FROM
    [testing].[dbo].[time_timeline]
FOR XML PATH(''), ROOT('data')

注意事項:

  • descriptionのテキストコンテンツとして取得するにeventは、レベルを「ステップアップ」して使用し、すべての列のエイリアスでPATH('')名前を指定する必要がありますevent
  • すべての属性中心の列は、すべての非属性中心の列の前に配置する必要があります

このことを学ぶ(または少なくともあなたが望むことを行う方法のアイデアを得る)ために、のドキュメントをFOR XML見て、あなた自身のテーブルと望ましいXML構造を試してみてください。

于 2010-05-12T14:57:33.687 に答える
1

FOR XML PATHへの切り替えを検討してください(ドキュメントについては、 http://msdn.microsoft.com/en-us/library/ms189885.aspxを参照してください)。

非常に部分的な例:

SELECT
    [name] 
   ,[description] 
   ,[startDate]   "@start"
   ,[endTime]     "@end"
  FROM [testing].[dbo].[time_timeline] 
  FOR XML PATH('event'), ROOT('data')
于 2010-05-12T14:46:14.053 に答える