मैं टी-एसक्यूएल में एक XML स्ट्रिंग में विशेषताओं में दोहरे उद्धरणों से कैसे बचूँ?


174

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

  • \ "
  • ""
  • \\ "

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

 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) यहाँ Openxml का उपयोग करने के लिए ... यह "पूर्व 2005" सामान है। यदि आपके पास xml मान है, तो इसे सीधे xml के रूप में उपयोग करें।
मार्क Gravell

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

जवाबों:


273

कि &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

tSql एक दूसरे दोहरे उद्धरण के साथ एक दोहरे उद्धरण से बच जाता है। इसलिए यदि आप चाहते हैं कि यह आपके sql स्ट्रिंग शाब्दिक का हिस्सा हो तो आप ऐसा करेंगे:

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

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

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

4
हालांकि एसक्यूएल स्ट्रिंग सीमांकक के रूप में दोहरे-उद्धरणों का उपयोग नहीं करना सबसे अच्छा है। QUOTED_IDENTIFIER सेटिंग की परवाह किए बिना, एकल उद्धरण ANSI मानक हैं और हमेशा काम करते हैं।
बोबिन्स

सहमत थे, लेकिन मैं यह प्रदर्शित करना चाहता था कि यह संभव है, बस मामले में कोई भ्रम था कि वह क्या करने की कोशिश कर रहा था।
जोएल कोएहॉर्न

4

अब टिप्पणी नहीं कर सकते लेकिन इसे वोट दिया और लोगों को यह बताना चाहा कि &quot;सोल में रेगेक्सट्रांसफॉर्मर के लिए रेग्ज एक्सप्रेशन बनाते समय xml कॉन्फिग फाइलों के लिए बहुत अच्छा काम करता है regex=".*img src=&quot;(.*)&quot;.*"


2

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

&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; 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.