2010-07-27 14 views
5

C'è un modo per ottenere la versione xml-safe di una colonna xml in sql server?Come ottenere la versione xml-safe di una colonna XML del server sql

By xml-Safe intendo fuggire caratteri speciali come <,>, ', &, ecc

vorrei evitare di fare le sostituzioni me stesso. Esiste una funzione build in SQL Server.

Quello che voglio raggiungere è quello di memorizzare il contenuto XML in un altro attributo XML.

+3

"xml-safe" ?? Che cosa vuoi dire con questo?? Per favore spiega - non è un'espressione comunemente usata secondo me .... –

+0

Cosa intendi con "evita di sostituirmi"? Di cosa si tratta "sostituisci" di cui parli? – NotMe

+0

Scommetto che pensa di dover tradurre '<' in '<', per esempio. –

risposta

8

Presumo che da XML-safe intendi fuga di speciali tag XML. Se si dispone di una colonna XML che si desidera includere in un altro documento XML, allora si hanno due opzioni:

  • progetto la colonna come [*]: select ..., xmlcolumn as [*], ... from ... for xml path... questo incorporerà il contenuto XML della colonna nel XML risultato. Per esempio. se la colonna ha il valore <element>value</element>, il risultato sarà come <root><row><element>value</element></row></root>.
  • progetto la colonna come nome della colonna: select ..., xmlcolumn, ... from ... for xml path... verrà inserito il contenuto della colonna come valore (cioè sarà sfuggire.). Per esempio. lo stesso valore di cui sopra produrrà <root><row><xmlcolumn>&lt;element&gt;&lt;value&lt;/element&gt;.

Se la tua domanda riguarda qualcos'altro, dovrai riformularlo correttamente e usare i termini correttamente. Non inventare nuovi termini che nessuno capisce ma tu.

Aggiornamento:

Se si sta inserendo valori XML nella colonna, allora non c'è bisogno di fare nulla. Le librerie client sanno come gestire la corretta escaping. Finché si scrive correttamente il codice. Ricorda, XML è NON una stringa e non dovrebbe mai, mai essere trattato come uno. Se si scrive XML nel client, utilizzare una libreria XML appropriata (XmlWriter, XML DOM, Linq to XML ecc.). quando si passa in XML a SQL Server, utilizzare il tipo appropriato: SqlXml. Le stored procedure devono utilizzare il tipo di parametro appropriato: XML. Quando lo leggi, utilizza il metodo appropriato per leggere XML: GetSqlXml(). Lo stesso vale per dichiarare il tipo in uno dei designer miriad (LINQ a SQL, EF ecc.). In definitiva, c'è mai qualsiasi necessità di sfuggire manualmente ai caratteri XML. Se ti accorgi di farlo, stai usando l'API sbagliata e devi tornare al tavolo da disegno.

Una lettura buon inizio è XML Support in Microsoft SQL Server 2005.

E, infine, di manipolare XML come lei (colonna XML aggiornamento tabella A con la colonna XML della tabella B), si utilizza XML methods, specificamente modify (... insert...), e si associa la colonna della tabella B all'interno del XQuery utilizzando sql:column:

In un commento si minaccia XML come stringa e, come ho già detto, non si dovrebbe mai farlo: stringhe e XML sono come acqua e olio.

2

I contenuti di una colonna XML sono XML. Per definizione, questo è "XML-safe".

Avete bisogno di includere XML da una colonna in un elemento XML o un attributo di un altro documento XML? Quindi salva l'XML esterno come una stringa nel nuovo documento.

+1

Ho bisogno di prendere l'XML e inserito in un attributo XML.Ho tabella A che contiene una colonna XML e Tabella B che contiene anche una colonna XML. Devo ottenere l'XML dalla tabella B e memorizzarlo in un attributo del contenuto xml della tabella A. Ho provato a fare un "" ma questo non funzionerà perché la tabellaBxmlContent contiene <, > ecc ... – pdiddy

10

Non è una risposta diretta a questa domanda, ma a tutti coloro che cerca di stringhe xml-fuga in TSQL, ecco un po 'la funzione che ho scritto:

CREATE FUNCTION escapeXml 
(@xml nvarchar(4000)) 
RETURNS nvarchar(4000) 
AS 
BEGIN 
    declare @return nvarchar(4000) 
    select @return = 
    REPLACE(
     REPLACE(
      REPLACE(
       REPLACE(
        REPLACE(@xml,'&', '&amp;') 
       ,'<', '&lt;') 
      ,'>', '&gt;') 
     ,'"', '&quot;') 
    ,'''', '&#39;') 

return @return 
end 
GO 
+0

Esattamente quello che stavo cercando, grazie! –

4

Un altro modo più semplice per xml sfuggire una stringa è utilizzare il seguente:

SELECT @String FOR XML PATH('') 

es

DECLARE @Input NVARCHAR(4000) = 'bacon & eggs' 
DECLARE @String = (SELECT @Input FOR XML PATH('')) 

quindi utilizzare @String da lì

+0

Bel modo di convertire l'olio in acqua! – brewmanz

Problemi correlati