2013-07-06 6 views
9

Ciao io sono nuovo di per xmlSostituire “<” e “>” con “<” and “>” in sql server

Ho una domanda come questo

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') 

è restituire il xml come

<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> 

le etichette dei tag vengono visualizzate nel modulo < e>. Ma i tag interni di posizione sono mostrati come “<” e “>” come li sostituisco con < e>

Aggiornamento: c'era un piccolo errore nella domanda. xml interiore non era per rtoid, è stato per Località

ho interrogazione aggiornato come

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') 

ma ancora il suo stesso

risposta

8

Il modo che ho trovato è con la loro sostituzione in modo esplicito:

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

Penso modo corretto sta usando TYPE Directive

SELECT ProjectId, 
     ..., 
     (SELECT Geo, ... 
     FROM GeographicLocation t2 
     WHERE GeoId = t1.LocationId 
     FOR XML PATH('Location'), TYPE), 
     RtoId,      ^^^^ 
     ... 
FROM Project t1 
where ProjectId=1 
FOR XML PATH('ProjectInfo') 
+0

Questa è la risposta corretta - ho lasciato tutto il mio vecchio codice dietro alla mia ultima società, e questa risposta mi impediva di tirare fuori i miei capelli. Grazie molto! – edhubbell

1

formattare i dati in xml, utilizzare il cast (@xml come xml).

0

Si prega di provare:

(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)')