2012-05-03 88 views
0

T-SQL XML值丢失新行格式SQL Server XML值格式化换行

我将XML文件加载到SQL Server中。我查询此文件以提取具有值的节点。

问题是新行字符在选择时会丢失。如何保留格式,以便在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数据类型中。

因此,当您再次查询它,你会得到一个语义正确的和相同的表示 - 但有一种可能性,即某些文本表示是不同的。

E.g.当你在一个空的XML元素这样的事情经过:

<MyEmptyElement></MyEmptyElement> 

,当您从SQL Server检索再次XML你将得到的是“短”的形式:

<MyEmptyElement /> 

这是不是完全相同的文本 - 但从语义角度来看它是100%相同的XML。

据我所知,你不能以任何方式影响这种行为 - 你只能忍受它。