2010-08-19 11 views
12

में "अच्छी तरह से गठित नहीं" त्रुटि का कारण बनता है I w3cschools XSLT ट्यूटोरियल के माध्यम से जा रहा हूं, और मैं इस पृष्ठ पर हूं: xsl-if

उस पृष्ठ पर (लाल रंग में) पाठ <xsl:if test="price &gt; 10"> है। यह काम। मैंने "&lt;" का उपयोग करने के लिए कोड को संशोधित किया और यह भी ठीक काम करता है।

मैंने <xsl:if test="price > 10"> का परीक्षण किया (&gt; के बजाय > का उपयोग नोट करें)। यह भी काम करता है।

लेकिन यह विफल रहता है:<xsl:if test="price < 10">। त्रुटि XML Parsing Error: not well-formed है और यह अभिव्यक्ति में < प्रतीक को इंगित करती है।

यदि > प्रतीक ठीक काम करता है, तो < का उपयोग क्यों विफल हुआ? (मैं फ़ायर्फ़ॉक्स उपयोग कर रहा हूँ)कम से कम ऑपरेटर xsl-if

उत्तर

12

हैं> प्रतीक ठीक काम किया, क्यों < असफल का उपयोग कर किया? (मैं फ़ायर्फ़ॉक्स उपयोग कर रहा हूँ)

क्योंकि "<" चरित्र कुछ है कि एक विशेषता मान के भीतर अवैध हैं में से एक है (यह शुरू की टैग चरित्र है)।

XML Specification

[10] AttValue ::= '"' ([^<&"] | Reference)* '"' 

रूप से स्पष्ट रूप से देखा जा सकता है, "<" और "&" वर्ण किसी भी विशेषता मान में अनुमति नहीं है।

अद्यतन: @Tomalak द्वारा देखा के रूप में, इसके बाद के संस्करण पढ़ना चाहिए:

के रूप में स्पष्ट रूप से देखा जा सकता है, "<" और "&" वर्ण (जब तक कि बाद एक इकाई संदर्भ या चरित्र का हिस्सा है संदर्भ) किसी भी विशेषता मूल्य में अनुमति नहीं है।

+1

+1 - हालांकि अंतिम टिप्पणी थोड़ा भ्रामक है: '&' की अनुमति नहीं है * जब तक कि यह एक एक्सएमएल इकाई का हिस्सा न हो। – Tomalak

+1

@ टोमालक: धन्यवाद, मैंने जवाब अपडेट किया। –

+2

@Tomalak: विशेषता मूल्य में '&' चरित्र की अनुमति नहीं है। किसी इकाई संदर्भ में कोई '&' वर्ण नहीं है, क्योंकि एक इकाई संदर्भ स्वयं एक इकाई है। और इसलिए विशेषता सामान्यीकरण चेहरे (एक्सएमएल पार्सर या कुछ एपीआई द्वारा) में इलाज किया जाता है –

4

अनएन्कोडेड "ओपनिंग" ब्रैकेट < आम तौर पर XML विशेषता मान as per the XML spec में अमान्य है।

जबकि "समापन" ब्रैकेट > की अनुमति है, इसका उपयोग वास्तव में खराब शैली (आईएमएचओ) है। एक्सएमएल विशेषता मान एक्सएमएल-एन्कोडेड, अवधि होना चाहिए।

+5

@ टोमालक: क्यों' > 'के बजाय'> 'का उपयोग करके कोड को और अधिक पठनीय बनाता है। मैं आमतौर पर' x < y' को' (x> y -1) ' –

+2

@ डिमिटर: यही कारण है कि मैंने" आईएमएचओ "लिखा था। जब मैं मूल्य एन्कोडिंग की बात करता हूं तो मैं काफी सख्त हूं, और अगर मैं दस्तावेज किया जाता हूं तो भी मैं शॉर्टकट्स और कमियों से बचता हूं। 'x < y' disturbs मेरे पढ़ने का प्रवाह बिलकुल नहीं। हालांकि, 'नहीं (x> y -1)' मुझे देखकर मुझे रोक देगा और सोचेंगे - भले ही सिर्फ एक सेकंड के लिए। मुझे यह क्यों चाहिए? मेरे लिए, बढ़ी हुई पठनीयता से अधिक नहीं है मुझे अभिव्यक्ति के बारे में सोचने की ज़रूरत है। मेरे लिए, यह आर्थिक नहीं है। – Tomalak

+1

मुझे लगता है कि वें 'x < y' के विपरीत पर यह' y> x' होना चाहिए। और अधिक पठनीय और अधिक आर्थिक है। इसके अलावा, मैं कभी नहीं समझता कि क्यों '<' पार्सर तोड़ सकता है और '>' नहीं! जा! –

6

तुम भी w3schools पर इसका जवाब देख सकते हैं:

http://www.w3schools.com/xmL/xml_syntax.asp

एंटिटी संदर्भ

कुछ वर्ण XML में एक विशेष अर्थ है।

आप एक XML तत्व के अंदर की तरह "<" एक चरित्र देते हैं, तो यह एक त्रुटि क्योंकि पार्सर एक नया तत्व की शुरुआत के रूप में यह व्याख्या उत्पन्न होगा।

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