2009-03-16 31 views
165

Domanda abbastanza semplice - Ho un attributo che mi piacerebbe avere doppie virgolette in. Come faccio a fuggire da loro? Ho provatoCome faccio a evitare le doppie virgolette negli attributi in una stringa XML in T-SQL?

  • \ "
  • ""
  • \\"

e ho fatto la variabile atributo @xml sia di tipo xml e varchar (max) per tutti loro .

declare @xml xml --(or varchar(max) tried both) 

set @xml = '<transaction><item value="hi "mom" lol" 
    ItemId="106" ItemType="2" instanceId="215923801" dataSetId="1" /></transaction>' 

declare @xh int 
exec sp_xml_preparedocument @xh OUTPUT, @xml 

insert into @commits --I declare the table, just removed it for brevity 
select 
    x.* 
from openxml(@xh,'/transaction/item') 
    WITH (
    dataItemId int, 
    dataItemType int, 
    instanceId int, 
    dataSetId int, 
    value varchar(max) 
) x 
+1

A proposito ... non c'è alcun motivo (AFAIK) per usare openxml qui ... cioè cose "pre-2005". Se hai un valore xml, usalo direttamente come xml. –

+0

Marc - Grazie. Ho avuto un altro bug che ha finito con l'essere openxml che stava scoppiando con gli apostrofi ricci: 'Penso che lo posterò come una domanda/risposta per trovare Google. –

risposta

266

Non sarebbe &quot; in xml? Ad esempio

"hi &quot;mom&quot; lol" 

** modifica: ** testata; funziona bene:

declare @xml xml 

set @xml = '<transaction><item value="hi &quot;mom&quot; lol" 
    ItemId="106" ItemType="2" instanceId="215923801" dataSetId="1" /></transaction>' 

select @xml.value('(//item/@value)[1]','varchar(50)') 
+4

" funziona anche in XAML. –

4

tSql fugge una virgoletta doppia con un'altra virgoletta doppia. Quindi, se si voleva che fosse parte della stringa di SQL letterale si dovrebbe fare questo:

declare @xml xml 
set @xml = "<transaction><item value=""hi"" /></transaction>" 

Se si desidera includere una citazione all'interno di un valorenel XML stesso, si utilizza un soggetto, che apparirebbe in questo modo:

declare @xml xml 
set @xml = "<transaction><item value=""hi &quot;mom&quot; lol"" /></transaction>" 
+4

Meglio non usare doppie virgolette come delimitatori di stringhe SQL però. Le virgolette singole sono standard ANSI e funzionano sempre, indipendentemente dall'impostazione QUOTED_IDENTIFIER. – bobince

+0

D'accordo, ma volevo dimostrare che è possibile, nel caso ci fosse qualche confusione su ciò che stava cercando di fare. –

2

In Jelly.core per testare una stringa letterale si potrebbe usare:

&lt;core:when test="${ name == 'ABC' }"&gt; 

Ma se devo verificare la stringa "Toy R Us":

&lt;core:when test="${ name == &amp;quot;Toy&apos;s R Us&amp;quot; }"&gt; 

Sarebbe come questo, se le virgolette sono stati ammessi all'interno:

&lt;core:when test="${ name == "Toy's R Us" }"&gt; 
4

non posso commentare più ma votato in su e ha voluto lasciare la gente sapere che &quot; funziona molto bene per la configurazione XML file quando si formano espressioni regex per RegexTransformer in Solr in questo modo: regex=".*img src=&quot;(.*)&quot;.*" utilizzando la versione di escape anziché le doppie virgolette.

+0

Ricorda, dare sempre una ragione per un downvote ti aiuta a sembrare un troll e migliora la qualità della discussione. – pulkitsinghal

Problemi correlati