2009-07-09 4 views
0

成分を含むレシピをサブ要素として持つレシピデータベースのxmlファイルを生成しようとしています。SQL Server FOR XML EXPLICITを使用した正しい入れ子での問題

select 
    1 as 'Tag' 
,null as 'parent' 
,replace(r.recipe_name, '/', '') as 'item!1!title!element' 
,isnull(replace(r.description, '/', ''), '') as 'item!1!description!cdata' 
,r.recipe_id as 'item!1!recipe_id!element' 
,null as 'ingredients!2!ingredient!element' 
from recipe r 
union all 
select 
    2 as 'Tag' 
    ,1 as 'parent' 
    ,null as 'item!1!title!element' 
    ,null as 'item!1!description!cdata' 
    ,r.recipe_id as 'item!1!recipe_id!element' 
    ,i.full_ingredient_txt as 'ingredients!2!ingredient!element' 
from 
    recipe r, ingredient i 
    where r.recipe_id = i.recipe_id 
order by 'item!1!recipe_id!element' 
for xml explicit 

次のXMLを生成する:

<item> 
    <title>3-D Cookie Packages</title> 
    <description><![CDATA[]]></description> 
    <recipe_id>52576</recipe_id> 
    <ingredients> 
    <ingredient>Assorted candy decorations, if desired</ingredient> 
    </ingredients> 
    <ingredients> 
    <ingredient>cup butter or margarine, softened</ingredient> 
    </ingredients> 
    <ingredients> 
    <ingredient>cup sugar</ingredient> 
    </ingredients> 
</item> 

私が本当にしたいことは、このように入れ子にする私の成分である:

<ingredients> 
     <ingredient>Assorted candy decorations, if desired</ingredient> 
     <ingredient>cup butter or margarine, softened</ingredient> 
     <ingredient>cup sugar</ingredient> 
    </ingredients> 

私が使用することはできません私のクエリはこれですXML PATHは、このメソッドを使用してサポートされていないdescriptionフィールドにCDATA宣言が必要なためです。

答えて

1

これはそれを行う必要があります。親要素のノードを保持するための追加レベルを追加しました

select 
1 as Tag 
,null as Parent 
,replace(r.recipe_name, '/', '') as 'item!1!title!element' 
,isnull(replace(r.description, '/', ''), '') as 'item!1!description!cdata' 
,r.recipe_id as 'item!1!recipe_id!element' 
,null as 'ingredients!2!' 
,null as 'ingredient!3!' 
from recipe r 
union all 
    select 
    2 as Tag 
    ,1 as Parent 
    ,null 
    ,null 
    ,r.recipe_id 
    ,'' 
    ,null 
from recipe r 
union all 
    select 
    3 as Tag 
    ,2 as Parent 
    ,null 
    ,null 
    ,r.recipe_id 
    ,null 
    ,i.full_ingredient_txt 
from 
    recipe r, ingredient i 
    where r.recipe_id = i.recipe_id 
order by 'item!1!recipe_id!element' 
for xml explicit 
+0

は魅力的です。ありがとう。私がしなければならなかった変更は、最初の結合ステートメントの後にselectステートメントを追加することでした。 –

+0

ちょうどそれをキャッチ.. – Rich

関連する問題