0

T-SQLXML値は改行形式を失います

XMLファイルをSQLサーバーにロードしました。このファイルをクエリして、値を持つノードを抽出します。

問題は、選択中に改行文字が失われることです。Webにテキストを表示するときに、改行なしで乱雑に表示されないようにフォーマットを保持する方法。

詳細については、テキストとスクリーンショットを参照してください

ここに画像の説明を入力してください

エディタは、新しい行が\n失われたことを示しています

T-SQLコード:

declare @Text xml ;
set @Text= '<?xml version="1.0" encoding="utf-8"?>
<topic>
  <L1>
    <Subject>Subject text</Subject>
    <Details>
      Story Details are

      This is paragraph

      Text after After two line breaks

      Text after After two line breaks

    </Details>
  </L1>
</topic>'

;with t as (select @Text [xmlcolumn])
--select * from t
SELECT  x.a.value('(Subject)[1]','nvarchar(max)') as [Subject]
,       x.a.value('(Details)[1]','nvarchar(max)') as [Details]
FROM   t
cross apply
t.xmlcolumn.nodes('//L1') x(a)
4

1 に答える 1

1

更新:私はあなたの質問を読み間違えました-改行の問題は純粋にSQL ServerManagementStudioにあります-それはそれらの改行を表すことができません。C#またはVB.NETのアプリケーションからXMLを読み取る場合、それらの改行は引き続き存在します。信頼してください。

ただし、この元の回答は他の場合にも関連する可能性があります。SQLServerはXMLを「現状のまま」保存していないことに注意する必要があります。これは、XMLを解析して変換します。したがって、元に戻すように依頼すると、外観が少し異なる場合がありますが、機能的には同じXMLです。


はい、これは正常な、予想される動作です。

SQL Serverは、XMLをトークン化された形式で格納します。たとえば、XMLの実際のテキスト表現は格納されませんが、XMLを解析してXMLフラグメントにトークン化し、このXMLデータ型内に格納されます。

したがって、再度クエリを実行すると、意味的に正しく同一の表現が返されますが、特定のテキスト表現が異なる可能性があります。

たとえば、空のXML要素を次のように渡す場合:

<MyEmptyElement></MyEmptyElement>

SQL ServerからXMLを再度取得すると、その「短い」形式が返されます。

<MyEmptyElement />

これはまったく同じテキストではありませんが、セマンティックの観点からは100%同じXMLです。

私の知る限り、この振る舞いに影響を与えることはできません。ただそれと一緒に暮らす必要があります。

于 2012-05-04T04:28:43.240 に答える