2012-05-03 11 views
0

T-SQL XML値が新しい行形式を失うSQL Server XML値の書式設定改行

SQLサーバーにXMLファイルが読み込まれています。私は値を持つノードを抽出するためにこのファイルに問い合わせます。

問題は、選択中に改行文字が失われることです。どのように私はWeb上でテキストを表示するときに、それが見た目のように改行なしで表示されないように書式を保持する方法。

参照テキストと詳細

enter image description here

Editor shows that new lines \n are lost

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) 

答えて

1

アップデート:私はあなたの質問を読み違える - 改行の問題点純粋にSQL Server Management Studioにあります - それはthを表すことができません改行してください。 C#またはVB.NETのアプリケーションからXMLを読み込むと、それらの改行はまだそこにあります。私を信頼してください。

しかし、このオリジナルの回答は他の場合にも関係します.SQL ServerはXMLを「そのまま」保存していないことを認識する必要があります。だからあなたがそれを取り戻すように頼むとき、それは若干異なって見えるかもしれませんが、機能的には同じXMLです。


はい、これは正常な動作です。

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

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

など。あなたは空のXML要素にこのような何か渡すとき:

<MyEmptyElement></MyEmptyElement> 

を使用すると、SQL ServerからのXMLを取得するとき、あなたは再びそれを「ショート」フォームが返されます:

<MyEmptyElement /> 

ですまったく同じテキストではありませんが、意味論の観点からは同じXMLの100%です。

私が知る限り、この動作には何らかの形で影響を与えることはできません。あなたはそれだけで生活しなければなりません。

関連する問題