medic
medic

Reputation: 37

Why is the CDATA directive not working this for xml explicit query?

I would expect the cdata tags to wrap the text value of col2 element but it is not doing so. I was using xml raw but because i got hit with some invalid xml characters in the data i now have to wrap everything with the cdata tags so I guess the only way to do this is by using explicit mode. Without the insert into the table the cdata tags are shown but the insert into the table removes them, I suspect it has something to do with the automatic xml data type conversion. Also the order by is not sorting by the numeric data type, it is doing a string sort


-- drop table Table1
-- truncate table Table1
create table dbo.Table1
(
  RowId int not null identity,
  BatchId int not null,    
  RequirementId int not null,   
  DataSheetName nvarchar(max) null,
  TestCaseName  nvarchar(max) null,
  GridStart nvarchar(max) null,
  GridId int not null,
  Col1  nvarchar(max) null,
  Col2  nvarchar(max) null
) 

create table results (
    GridName nvarchar(max),
    GridXML xml,
)


insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','Grid', 1,'','Deal Number')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','1', 1,'r1','r1c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','2', 1,'r2','r2c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','3', 1,'r3','r3c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','4', 1,'r4','r4c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','5', 1,'r5','r5c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','6', 1,'r6','r6c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','7', 1,'r7','r7c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','8', 1,'r8','r8c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','9', 1,'r9','r9c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','10', 1,'r10','r10c1')
insert into Table1(BatchId, RequirementId, DataSheetName,TestCaseName,GridName,GridStart,GridId, Col1,Col2)
values(1,1,'DataSheet','TestCase1','Grid1','END', 1,'','')


   insert into results
   select Z.GridName,  
      (select * from 
         ( select 1 [Tag], null [Parent], null [DocumentElement!1!], 
            null [tr!2!], null [tr!2!RowId!Element], null [tr!2!Col2!CDATA]  

            union  all  

            select 2 as Tag, 1 as Parent, 'DocumentElement',GridStart,GridStart, Col2  
            from Table1 S  
            where GridStart != 'GRID' and GridStart != 'END'  
            and Z.DataSheetName = S.DataSheetName  
            and Z.TestCaseName = S.TestCaseName  
            and Z.GridName = S.GridName  
            and Z.GridId = S.GridId  
            and Z.BatchId = S.BatchId 
         ) 
         as GridData 
         order by [tr!2!RowId!Element] 
         for xml explicit 
      ) as G 
    from dbo.Table1 Z 

select  *  from results

Generated output:

<DocumentElement>
  <tr>1<RowId>1</RowId><Col2>r1c1</Col2></tr>
  <tr>10<RowId>10</RowId><Col2>r10c1</Col2></tr>
  <tr>2<RowId>2</RowId><Col2>r2c1</Col2></tr>
  <tr>3<RowId>3</RowId><Col2>r3c1</Col2></tr>
  <tr>4<RowId>4</RowId><Col2>r4c1</Col2></tr>
  <tr>5<RowId>5</RowId><Col2>r5c1</Col2></tr>
  <tr>6<RowId>6</RowId><Col2>r6c1</Col2></tr>
  <tr>7<RowId>7</RowId><Col2>r7c1</Col2></tr>
  <tr>8<RowId>8</RowId><Col2>r8c1</Col2></tr>
  <tr>9<RowId>9</RowId><Col2>r9c1</Col2></tr>
</DocumentElement>


<DocumentElement>
  <tr>1<RowId>1</RowId><Col2><![CDATA[r1c1]]</Col2></tr>
  <tr>2<RowId>2</RowId>Col2><![CDATA[r2c1]]</Col2></tr>
  <tr>3<RowId>3</RowId>Col2><![CDATA[r3c1]]</Col2></tr>
  <tr>4<RowId>4</RowId>Col2><![CDATA[r4c1]]</Col2></tr>
  <tr>5<RowId>5</RowId>Col2><![CDATA[r5c1]]</Col2></tr>
  <tr>6<RowId>6</RowId>Col2><![CDATA[r6c1]]</Col2></tr>
  <tr>7<RowId>7</RowId>Col2><![CDATA[r7c1]]</Col2></tr>
  <tr>8<RowId>8</RowId>Col2><![CDATA[r8c1]]</Col2></tr>
  <tr>9<RowId>9</RowId>Col2><![CDATA[r9c1]]</Col2></tr>
  <tr>10<RowId>10</RowId>Col2><![CDATA[r10c1]]</Col2></tr>
</DocumentElement>

Upvotes: 0

Views: 113

Answers (0)

Related Questions