2

現在、次のような SQL ステートメントがあります (複雑さの一部を削除しました)。

SELECT 
Name as '@name'
,(
    SELECT foo.Name as '@name', foo.Key as '@key'
    FROM foo
    FOR XML Path('foo'), root ('foos'), type
)
,(
    SELECT 
        1 as Tag
        ,null as Parent
        ,bar.Name as 'bar!1!name'
        ,bar.Key as 'bar!1!key'
        ,bar.Content as 'bar!1!!cdata'
    FROM   bar
    FOR XML EXPLICIT, root ('bars'), type
)
FROM baz
FOR XML Path('baz'), root ('bazzes')

このクエリの結果は、次のような優れた XML 値です。

<bazzes>
    <baz name="">
        <foos>
            <foo name="" key=""> 
            </foo>
        </foos>
        <bars>
            <bar name="" key="">
             <content>the content</content>
            </bar>
        </bars>
    </baz>
</bazzes>

content要素に期待どおりの CDATA マークアップがないことに注意してくださいtype

ただし、タイプを削除すると、コンテンツ要素全体がエンコードされて次のようになります。

<bazzes>
    <baz name="">
        <foos>
            <foo name="" key=""> 
            </foo>
        </foos>
        <bars>
            <bar name="" key="">
             &lt;content&gt; etc.
            </bar>
        </bars>
    </baz>
</bazzes>

クエリの結果を有効な xml 値に保ち、型引数を削除して、CDATA マークアップが正しくなるようにするにはどうすればよいですか。

<bazzes>
        <baz name="">
            <foos>
                <foo name="" key=""> 
                </foo>
            </foos>
            <bars>
                <bar name="" key="">
                 <content><![CDATA[the content]]></content>
                </bar>
            </bars>
        </baz>
    </bazzes>
4

1 に答える 1