XML में दोहरे उद्धरण वर्ण से बचे


101

क्या xml में एक दोहरे उद्धरण के लिए एक एस्केप चरित्र है? मैं एक टैग लिखना चाहता हूं जैसे:

<parameter name="Quote = " ">

लेकिन अगर मैंने डाल दिया, तो इसका मतलब है कि स्ट्रिंग समाप्त हो गई है। मुझे कुछ इस तरह की जरूरत है (सी ++):

printf("Quote = \" ");

क्या इससे बचने के लिए दोहरे उद्धरण से पहले एक चरित्र लिखना है?





संक्षिप्त उत्तर: &quot; शेष कहानी ...
kjhughes

जवाबों:



119

यहाँ सामान्य वर्ण हैं जिन्हें XML में भाग देने की आवश्यकता है, जो दोहरे उद्धरण चिह्नों से शुरू होता है:

  1. दोहरे उद्धरण चिह्नों ( ") से बच जाते हैं&quot;
  2. एम्परसेंड ( &) बच जाता है&amp;
  3. सिंगल कोट्स ( ') बच जाते हैं&apos;
  4. से कम ( <) बच जाता है&lt;
  5. से बड़ा ( >) बच जाता है&gt;

3
गलत; सका एक वैध XML वर्ण नहीं है। यह एक वैध HTML चरित्र है - जो कि SGML और XML का एक SUPERset है।
स्टीफन स्टीगर

हालांकि यह एक वैध बिंदु है, मैंने जो सबसे आधुनिक XML पार्सर्स के साथ काम किया है, वे इसे वैध चरित्र के रूप में स्वीकार कर रहे हैं।
डेरियस जी। जगिल्स्की

& quot; एंड्रॉइड द्वारा सही तरीके से व्याख्या नहीं की जाती है जब स्ट्रिंग दोहरे उद्धरणों से घिरा होता है। इस मामले में ई-अधिकतम जवाब काम करने के लिए एकमात्र है।
सॉफ्टलियन

@StefanSteiger इसके चालू होने के इस सूची
OrangeDog

@ डारिज जी। जगिल्स्की: जबकि मेरे पास आधुनिक एक्सएमएल पार्सर्स के खिलाफ कुछ भी नहीं है - यदि आप एक्सएमएल के साथ डेटाबेस (जैसे एमएस / पीजी) में काम करते हैं, तो आप देखेंगे कि हर एक सॉफ्टवेयर आधुनिक एक्सएमएल पर्सर्स का उपयोग नहीं कर रहा है। खासकर जब यह जटिल दशकों पुराना सॉफ्टवेयर है। उस ने कहा, अगर हर कोई एक आधुनिक xml पार्सर का उपयोग करता है, तो यह एक अच्छी बात होगी। हालाँकि, यदि उस कोड को पुराने जटिल सॉफ़्टवेयर में गहराई से एकीकृत किया गया है, तो इसे बदलना बहुत मुश्किल हो जाता है (जबकि 100% बैकवर्ड कॉम्पिटिटेरिटी बरकरार रखते हुए)। सी के डाउनसाइड्स या निर्भरता इंजेक्शन का उपयोग नहीं करने के लिए, ऐसा कहने के लिए।
स्टीफन स्टीगर

27

दूसरों ने इस मामले में विशिष्ट भागने से निपटने के तरीके के रूप में उत्तर दिया है।

एक व्यापक उत्तर यह नहीं है कि आप इसे स्वयं करने का प्रयास करें। XML API का उपयोग करें - अस्तित्व में हर आधुनिक प्रोग्रामिंग प्लेटफॉर्म के लिए बहुत सारे उपलब्ध हैं।

XML API आपके लिए इस तरह की चीजों को अपने आप संभाल लेगी, जिससे गलत होने में बहुत मुश्किल होगी। जब तक आप स्वयं XML API नहीं लिख रहे हैं, तब तक आपको इस तरह के विवरण के बारे में चिंता करने की आवश्यकता नहीं है।


11
मैं यह नहीं कह सकता कि मैं सहमत हूं। यह सोचना मूर्खतापूर्ण लगता है कि हमें एपीआई पर इतना भरोसा करना चाहिए कि हमें इस बात पर अमल करना चाहिए कि हमें यह भी समझने की जरूरत नहीं है कि एक्सएमएल को कैसे पढ़ना और लिखना है। जब आप इसे एक विकृत दस्तावेज़ खिलाते हैं, तो यह आपके लिए बहुत मदद करने वाला नहीं है कि XML XML API संभवत: नहीं है और यह चल रही है। किसी को लोड करने के लिए डेटा को ठीक करना होगा।
क्रिस्टोफर पेंटर

@ChristopherPainter XML मानक के आकार को देखते हुए, मुझे संदेह है कि बहुत सारे लोग हैं जो वास्तव में इसे समझते हैं। अब कई लोग हैं जो सोचते हैं कि वे करते हैं, लेकिन वे वास्तव में नहीं करते हैं।
मोनिका

2
ठीक है, आप कहीं शुरू करने के लिए मिला है। हमारे उद्योग में पाठ्यक्रम में हम सिर्फ शिकायत करते हैं कि XML बेकार है और JSON जैसी किसी चीज़ के साथ शुरू होता है। फिर प्रक्रिया दोहराती है।
क्रिस्टोफर पेंटर

15

एक पुराने, अक्सर पूछे जाने वाले प्रश्न का नया, बेहतर उत्तर ...

एक्सएमएल में डबल कोट से बचने के लिए कब

दोहरी बोली ( ") भागने के बिना दिखाई दे सकती है :

  • XML पाठ सामग्री में:

    <NoEscapeNeeded>He said, "Don't quote me."</NoEscapeNeeded>
  • XML विशेषताओं में एकल उद्धरण द्वारा सीमांकित ( '):

    <NoEscapeNeeded name='Pete "Maverick" Mitchell'/>

    नोट: एकल उद्धरण ( ') पर स्विच करने के लिए भी बचने की आवश्यकता नहीं है:

    <NoEscapeNeeded name="Pete 'Maverick' Mitchell"/>

डबल उद्धरण ( ") बच जाना चाहिए :

  • एक्सएमएल विशेषताओं में दोहरे उद्धरण द्वारा सीमांकित:

    <EscapeNeeded name="Pete &quot;Maverick&quot; Mitchell"/>

जमीनी स्तर

एक्सएमएल के "रूप &quot;में दोहरे उद्धरण ( ) से बचना चाहिए क्योंकि बहुत सीमित संदर्भों में।


7

नहीं, इस तरह के रूप में एक भागने चरित्र नहीं है, इसके बजाय आप चरित्र का प्रतिनिधित्व &quot;करने के <![CDATA["]]>लिए भी उपयोग या कर सकते हैं "



2

C ++ में आप EscapeXML ATL API का उपयोग कर सकते हैं। ये है खास चरस को संभालने का सही तरीका ...


1

आप बैकस्लैश का उपयोग करके "u" और फिर चरित्र के लिए यूनिकोड मान का उपयोग कर सकते हैं, उदाहरण के लिए डबल क्विक का यूनिकोड मान है

”-> U + 0022

इसलिए यदि आप इसे Android में XML में पाठ के भाग के रूप में सेट कर रहे हैं तो यह कुछ इस तरह दिखाई देगा,

<TextView
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:text=" \u0022 Showing double quotes \u0022 "/>

यह TextView में कुछ इस तरह से एक पाठ का उत्पादन करेगा

"डबल कोट्स दिखा रहा है"

आप यहां ज्यादातर प्रतीकों और पात्रों के यूनिकोड www.unicode-table.com/en पा सकते हैं


आप सबसे अधिक प्रतीकों और पात्रों यहाँ से यूनिकोड पा सकते हैं unicode-table.com/en
ई अधिकतम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.