0

T-SQL XML 值丢失新的行格式

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

问题是选择时新行字符丢失。如何保留格式,以便当我在网络上显示文本时,如果没有换行符,它不会显得凌乱。

有关详细信息,请参阅文本和屏幕截图

在此处输入图像描述

编辑器显示新行 \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 Server Management Studio 中 - 它不能代表那些换行符。当您从 C# 或 VB.NET 的应用程序中读取 XML 时,这些换行符仍然存在 - 相信我。

但是这个原始答案在其他情况下也可能是相关的——你需要知道 SQL Server 没有“按原样”存储你的 XML——它会解析并转换它。因此,当您要求取回它时,它可能看起来略有不同,但在功能上它仍然是相同的 XML。


是的,这是正常的预期行为。

SQL Server 以标记化格式存储您的 XML - 例如,它不存储 XML 的实际文本表示,但它将您的 XML 解析并标记为 XML 片段,然后存储在此XML数据类型中。

因此,当您再次查询它时,您将得到一个语义正确且相同的表示 - 但某些文本表示可能会有所不同。

例如,当您传入一个空的 XML 元素时,如下所示:

<MyEmptyElement></MyEmptyElement>

当您再次从 SQL Server 检索 XML 时,您将返回“短”形式:

<MyEmptyElement />

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

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

于 2012-05-04T04:28:43.240 回答