7

SQL Server XML リターンで CDATA を使用する方法はありますか? 次のように、SQL Server から XML が返されます。

<locations>
    <site id="124">
        <sitename>Texas A &amp; M</sitename>
    </site>
</locations>

これが必要な場合:

<locations>
    <site id="124">
        <sitename><![CDATA[Texas A & M]]></sitename>
    </site>
</locations>
4

3 に答える 3

16

FOR XML EXPLICIT (パラメーターDirective )のオプションを見てください。これにより、より高度な制御が可能になり、CDATA を指定することもできます。ここに良いチュートリアルがあります。

そして、そのチュートリアルから追加されたコード:

declare @agent table
(    
    AgentID int,
    Fname varchar(5),
    SSN varchar(11)
)

insert into @agent
select 1, 'Vimal', '123-23-4521' union all
select 2, 'Jacob', '321-52-4562' union all
select 3, 'Tom', '252-52-4563'

SELECT
    1 AS Tag,
    NULL AS Parent,
    NULL AS 'Agents!1!',
    NULL AS 'Agent!2!AgentID',
    NULL AS 'Agent!2!Fname!Element',
    NULL AS 'Agent!2!SSN!cdata'
UNION ALL
SELECT
    2 AS Tag,
    1 AS Parent,
    NULL, 
    AgentID,
    Fname,
    SSN
FROM @agent
FOR XML EXPLICIT
于 2009-09-15T20:16:49.410 に答える
0

Joel が上記のコメントで述べたように、これら 2 つの形式はまったく同じことを意味するはずです。ただし、CDATA フォームが本当に必要な場合は、最初のフォームを入力として受け取り、CDATA を使用して 2 番目のフォームを出力するポストプロセッサを作成できます。

これを行う場合、ポストプロセッサはXMLエスケープされたデータを最初の形式でエンコード解除し、CDATA 互換の方法を使用して再エンコードします。Is there a way to escape a CDATA end token in xml?という質問を参照してください。CDATA エスケープに関する考慮事項。

于 2009-09-15T20:14:33.893 に答える