2009-03-16 11 views
165

बहुत आसान सवाल - मेरे पास एक विशेषता है जिसमें मैं दोहरे उद्धरण प्राप्त करना चाहता हूं। मैं उनसे कैसे बचूं? मैंटी-एसक्यूएल में एक्सएमएल स्ट्रिंग में विशेषताओं में डबल कोट्स से कैसे बचूं?

  • की कोशिश की है "\"
  • "
  • \\"

और मैं उन सभी के लिए @xml चर दोनों एक्सएमएल प्रकार और varchar (max) बनाया है ।

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

वैसे ... ओपनएक्सएमएल का उपयोग करने के लिए कोई कारण नहीं है (AFAIK) ... यह "प्री-2005" सामान है। यदि आपके पास xml मान है, तो इसे सीधे XML के रूप में उपयोग करें। –

+0

मार्क - धन्यवाद। मेरे पास एक और बग था जो ओपनएक्सएमएल हो गया था, घुंघराले एस्ट्रोफ़ेस के साथ झुका हुआ था: 'मुझे लगता है कि मैं इसे Google के लिए एक प्रश्न/उत्तर के रूप में पोस्ट करने जा रहा हूं। –

उत्तर

266

क्या यह &quot; xml में नहीं होगा? यानी

"hi &quot;mom&quot; lol" 

** संपादित करें: ** परीक्षण; ठीक काम करता है:

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

" एक्सएएमएल में भी ठीक काम करता है। –

4

tSql एक और डबल कोट के साथ एक डबल कोट से बच निकला।

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

आप एक्सएमएल अपने आप में एक मूल्य अंदर एक उद्धरण शामिल करना चाहते हैं, तो आप एक इकाई है, जो विचार करेंगे का उपयोग करें: तो अगर आप इसे अपने एसक्यूएल स्ट्रिंग शाब्दिक का हिस्सा तो आप इस करना होगा बनना चाहता था इस तरह:

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

हालांकि SQL स्ट्रिंग डिलीमीटर के रूप में डबल-कोट्स का उपयोग न करें। सिंगल कोट्स एएनएसआई मानक हैं और QUOTED_IDENTIFIER सेटिंग के बावजूद हमेशा काम करते हैं। – bobince

+0

सहमत हुए, लेकिन मैं यह दिखाना चाहता था कि यह संभव है, बस अगर वह ऐसा करने की कोशिश कर रहा था, उसके बारे में कोई भ्रम हो। –

2

Jelly.core में एक शाब्दिक स्ट्रिंग परीक्षण करने के लिए एक का प्रयोग करेंगे:

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

लेकिन अगर मैं स्ट्रिंग "खिलौना के आर हमारे" के लिए जाँच करने के लिए है:

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

यह इस तरह हो सकता है अगर दोहरे उद्धरण चिह्नों के अंदर की अनुमति दी गई:

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

अब और टिप्पणी नहीं कर सकता, लेकिन यह ऊपर वोट दिया और लोगों को यह बताना चाहता था कि &quot; काम करता है बहुत अच्छी तरह से करने के लिए एक्सएमएल config फ़ाइलों में RegexTransformer के लिए regex अभिव्यक्तियों को बनाने के दौरान फ़ाइलें जैसे: regex=".*img src=&quot;(.*)&quot;.*" डबल-कोट्स के बजाय बच निकले संस्करण का उपयोग कर।

+0

याद रखें, हमेशा डाउनवोट का कारण देने से आपको ट्रोल की तरह दिखने में मदद मिलती है और चर्चा की गुणवत्ता में सुधार होता है। – pulkitsinghal

संबंधित मुद्दे