2013-07-06 12 views
9

Witam Jestem nowy na xmlWymień „<” i „>” z „<” and “>” w serwerze sql

Mam zapytanie jak ten

SELECT ProjectId, 
     ProjectCode, 
     ProjectName, 
     TechId, 
     -- LocationId, 

     (SELECT GeoId,PoliticalDivisionId ,GeographicLocationName,IsoCode,Longitude,Latitude,ParentLocationId, 
     t2.CreatedBy,t2.CreatedOn,t2.LastUpdatedBy,t2.LastUpdatedOn 
    FROM GeographicLocation t2 
    WHERE GeoId = t1.LocationId 
    FOR XML PATH('Location')), 
     RtoId, 
     CreatedBy, 
     CreatedOn, 
     LastUpdatedBy, 
     LastUpdatedOn 
FROM Project t1 
where ProjectId=1 
FOR XML PATH('ProjectInfo') 

zwróci XML jako

<ProjectInfo> 
<ProjectId>1</ProjectId> 
<ProjectCode>US-W1-00001</ProjectCode> 
<ProjectName>Rees</ProjectName> 
<TechId>1</TechId> 
&lt;Location&gt;&lt;GeoId&gt;235&lt;/GeoId&gt;&lt;PoliticalDivisionId&gt;2&lt;/PoliticalDivisionId&gt;&lt;GeographicLocationName&gt;UNITED STATES&lt;/GeographicLocationName&gt;&lt;IsoCode&gt;US&lt;/IsoCode&gt;&lt;/Location&gt; 
<RtoId>3</RtoId> 
<CreatedBy>1</CreatedBy> 
<CreatedOn>2013-06-30T20:55:21.587</CreatedOn> 
<LastUpdatedBy>1</LastUpdatedBy> 
<LastUpdatedOn>2013-06-30T20:55:21.587</LastUpdatedOn> 

Znaczniki prject są wyświetlane w postaci < i>. Ale wewnętrzne znaczniki lokalizacji są wyświetlane jako „<” i „>” jak mogę je zastąpić < i>

Aktualizacja: był tam mały błąd w pytaniu. wewnętrzna xml nie było dla rtoid, było dla gości

zaktualizowałem kwerendy

SELECT ProjectId, 
     ProjectCode, 
     ProjectName, 
     TechId, 
     -- LocationId, 

     replace(replace((SELECT GeoId,PoliticalDivisionId ,GeographicLocationName,IsoCode,Longitude,Latitude,ParentLocationId, 
     t2.CreatedBy,t2.CreatedOn,t2.LastUpdatedBy,t2.LastUpdatedOn 
    FROM GeographicLocation t2 
    WHERE GeoId = t1.LocationId 
    FOR XML PATH('Location')), '&lt;', '<'), '&gt;', '>'), 
     RtoId, 
     CreatedBy, 
     CreatedOn, 
     LastUpdatedBy, 
     LastUpdatedOn 
FROM Project t1 
where ProjectId=1 
FOR XML PATH('ProjectInfo') 

ale nadal jest tak samo

Odpowiedz

8

Sposób, że znalazłem to wyraźnie z ich wymianą:

select ProjectId, ProjectCode, ProjectName, TechId, 
     replace(replace(RtoId, '&lt;', '<'), '&gt;', '>') as RtoId, 
     . . . 
from (<your query here>) 
3
SELECT ProjectId, 
     ProjectCode, 
     ProjectName, 
     TechId, 
     -- LocationId, 
     replace(replace((SELECT GeoId,PoliticalDivisionId ,GeographicLocationName,IsoCode,Longitude,Latitude,ParentLocationId, 
     t2.CreatedBy,t2.CreatedOn,t2.LastUpdatedBy,t2.LastUpdatedOn 
    FROM GeographicLocation t2 
    WHERE GeoId = t1.LocationId 
    FOR XML PATH('Location')), '&lt;', '<'), '&gt;', '>') 
     RtoId, 
     CreatedBy, 
     CreatedOn, 
     LastUpdatedBy, 
     LastUpdatedOn 
FROM Project t1 
where ProjectId=1 
FOR XML PATH('ProjectInfo') 
10

myślę poprawny sposób korzysta TYPE Directive

+0

To jest poprawna odpowiedź - Zostawiłem cały mój stary kod tył w mojej ostatniej spółki, a ta odpowiedź mnie od ciągnięcie moich włosów. Wielkie dzięki! – edhubbell

0

Spróbuj:

(SELECT GeoId,PoliticalDivisionId ,GeographicLocationName,IsoCode, 
     Longitude,Latitude,ParentLocationId, 
     t2.CreatedBy,t2.CreatedOn,t2.LastUpdatedBy,t2.LastUpdatedOn 
    FROM GeographicLocation t2 
    WHERE GeoId = t1.LocationId 
     FOR XML PATH('Location'), type 
     ).value('(./text())[1]','varchar(max)') 
Powiązane problemy