0

I have a SQL Server table with an XML column like this:

create table tab
(
     Id int, 
     Title nvarchar(200), 
     XmlCol xml
)

I need to return an XML like this

<tabs>
    <tab Id="1" Title="Some Title">
        <xmlcontent>...</xmlcontent>
        <xmlcontent>...</xmlcontent>
        <xmlcontent>...</xmlcontent>
    </tab>
</tabs>

My best approach so far is:

select Id, Title, XmlCol.Query('xmlcontent')
from tab
for xml raw('tab'), root('tabs')

but I am getting this:

<tabs>
    <tab Id="1" Title="Some Title">
        <XmlCol>
            <xmlcontent>...</xmlcontent>
            <xmlcontent>...</xmlcontent>
            <xmlcontent>...</xmlcontent>
        <XmlCol>
    </tab>
</tabs>

XmlCol column contains XML data like this (not well-formed)

 <xmlcontent>...</xmlcontent>
 <xmlcontent>...</xmlcontent>
 <xmlcontent>...</xmlcontent>

Any idea how to flatten the structure to omit the XmlCol node?

2 Answers 2

1
declare @tab table(Id int, Title nvarchar(200), XmlCol xml);
insert into @tab(id, Title, XmlCol)
values(1, N'1 Title test 1', N'<xmlcontent><e1 x="1">a</e1><e2 x="1" y="2">b</e2><test>a test</test> xmlcontent1 text</xmlcontent>'),
(2, N'2 Title test 2', N'<xmlcontent><e1 x="1">111</e1><e2 x="1" y="2">222</e2><test>333</test>xmlcontent2 text</xmlcontent>');

select Id, Title, XmlCol.query('xmlcontent/node()')
from @tab as tab
for xml raw('tab'), root('tabs');
Sign up to request clarification or add additional context in comments.

Comments

0

Using:

SELECT Id, Title , XmlCol.query('//xmlcontent')
FROM tab
FOR XML RAW('tab'), ROOT('tabs');

db<>fiddle demo

Output:

<tabs>
  <tab Id="1" Title="Some Title">
     <xmlcontent>...</xmlcontent>
     <xmlcontent>...</xmlcontent>
     <xmlcontent>...</xmlcontent>
  </tab>
</tabs>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.