user219628
user219628

Reputation: 3905

SQL Server XML Value formatting newline

T-SQL XML value loses new line formats

I have XML file loaded into SQL server. I query this file to extract the nodes with value.

The problem is the new line characters are lost while selection. How to retain formatting so that when I display the text on the web, it not appear messy without line breaks.

See text and screenshots for details

enter image description here

Editor shows that new lines \n are lost

T-SQL code:

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)

Upvotes: 0

Views: 3967

Answers (1)

marc_s
marc_s

Reputation: 754488

Update: I misread your question - the problem with the newlines is purely in SQL Server Management Studio - it cannot represent those newlines. When you read your XML from an application in C# or VB.NET, those newlines will still be there - trust me.

But this original answer might also be relevant in other cases - you need to be aware that SQL Server is not storing your XML "as is" - it parses and converts it. So when you ask to get it back, it might look slightly different, but it's still the same XML functionally.


Yes, this is normal, expected behavior.

SQL Server stores your XML in a tokenized format - e.g. it doesn't store the actual, textual representation of your XML, but it parses and tokenizes your XML into XML fragments that are then stores inside this XML datatype.

Therefore, when you query it again, you'll get back a semantically correct and identical representation - but there's a possibility that certain textual representations are different.

E.g. when you pass in an empty XML element something like this:

<MyEmptyElement></MyEmptyElement>

you'll get back the "short" form of that when you retrieve the XML from SQL Server again:

<MyEmptyElement />

This is not the exact same text - but it's 100% the same XML from a semantic perspective.

As far as I know, you cannot influence this behavior in any way - you'll just have to live with it.

Upvotes: 1

Related Questions