2008-10-16 11 views
10

में विशेष वर्ण एक्सएमएल और एक्सएसएल का उपयोग कर एक बाएं नेविगेशन सिस्टम बना रहे हैं। जब तक मैंने अपने एक्सएमएल दस्तावेज़ में एक विशेष चरित्र का उपयोग करने की कोशिश नहीं की, तब तक सबकुछ बढ़ रहा था। मैं » का उपयोग कर रहा हूं और मुझे वें त्रुटि मिलती है।एक्सएमएल

कारण: अपरिभाषित इकाई 'raquo' के संदर्भ।
त्रुटि कोड: -1072898046

मैं इस काम कैसे कर सकता हूँ?

उत्तर

0

क्या आप सीधे »प्रतीक का उपयोग कर रहे हैं या आप इसे & raquo के रूप में परिभाषित कर रहे हैं; ? यदि आप बच निकले प्रतीक का उपयोग कर रहे हैं, तो क्या आप अर्धविराम भूल गए हैं?

+0

मैं के रूप में यह परिभाषित करने कर रहा हूँ »। डबल चेक किया गया और नहीं मैंने नहीं किया; जब मैंने यहां चिपकाया तो अर्धविराम सिर्फ मिस गया। – BillZ

5

क्या आपने अपनी फ़ाइल के लिए दस्तावेज़ प्रकार निर्दिष्ट किया था?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

मुझे लगता है कि अगर आप इसे निर्दिष्ट करना भूल जाते हैं तो आपको ऐसी त्रुटियां मिल सकती हैं।

कभी-कभी इकाइयां काम करती हैं यदि आप उन्हें नाम के बजाय संख्या द्वारा निर्दिष्ट करते हैं।

&#187; &#171; instead of &raquo; and &laquo; 
+0

जो एक HTML DOCTYPE है। –

+0

नहीं, यह एक्सएचटीएमएल डॉक्ट टाइप है। एक्सएचटीएमएल एक एक्सएमएल एप्लीकेशन है और यह '»' परिभाषित करता है। – Quentin

20

आप एक गैर- HTML या गैर एक्सएचटीएमएल दस्तावेज़ में एक HTML entity उपयोग करने के लिए कोशिश कर रहे हैं। इन इकाइयों को दस्तावेज़ के Document Type Definition (DTD) में घोषित किया गया है।

आपको entity reference के संख्यात्मक यूनिकोड संस्करण का उपयोग करना चाहिए। उदाहरण के लिए, &raquo; के मामले में आप वैकल्पिक रूप से &#187;

का उपयोग करना चाहिए, आप कर सकते हैं define them in your XML document's DTD:

<!ENTITY entity-name "entity-value"> 
<!ENTITY raquo "&#187;"> 

अन्यथा, यदि आपके दस्तावेज़ UTF-8 है, मेरा मानना ​​है कि आप बस में सीधे वास्तविक चरित्र का उपयोग कर सकते आपका एक्सएमएल दस्तावेज़

» 
+2

यदि आप कर सकते हैं तो निश्चित रूप से यूनिकोड वर्ण या यूनिकोड इकाई संदर्भों का उपयोग करें।एक्सएमएल में नामित चरित्र संदर्भों से बचा जाना चाहिए। –

+1

यह काफी संभव है कि ओपी के पास उसके एक्सएमएल के लिए डीटीडी नहीं है। फिर भी, यदि उपयोगकर्ता चाहता था तो आपका उत्तर आंतरिक सबसेट के अंदर उपयोग किया जा सकता है। हालांकि, आप सही हैं कि सरल उत्तर यूटीएफ -8 है और केवल चरित्र का उपयोग करें। –

1

यह एक मुद्दा है क्योंकि सभी HTML इकाइयां XML इकाई नहीं हैं। के रूप में पैट सुझाव आपको अपने दस्तावेज़ में HTML का DTD आयात कर सकते हैं, या में से एक निम्न करें:

&raquo; becomes &#187; 

लपेटें सभी की आवृत्तियां:

संख्यात्मक इकाई कोड के साथ विशेष वर्ण की सभी आवृत्तियां बदलें एक CDATA टैग में विशेष वर्ण

<![CDATA[&raquo;]]> 

अपने दस्तावेज़ के शीर्ष पर entitys परिभाषित

<!DOCTYPE ROOT_XML_ELEMENT [ <!ENTITY raquo "&#187;"> ]> 
0

जो

जब मैं यूनिकोड संस्करण का उपयोग करता हूं तो एक वर्ग दिखाता है।

एक्सएमएल दस्तावेज़ में इकाई क्षीणन को डालने से "डीटीडी के बाहर एक डीटीडी घोषणा नहीं हो सकती है।" त्रुटि। मुझे लगता है कि यह उम्मीद है।

जब मैं बाहरी रूप से डीआईडी ​​को शामिल करने के लिए '' का उपयोग करता हूं तो इसका कोई प्रभाव नहीं पड़ता है।

मुझे आश्चर्य है कि यह शायद एक सर्वर मुद्दा है या नहीं। मैं इसे स्थानीय रूप से विकसित कर रहा हूं और बेबी वेब सर्वर का उपयोग कर रहा हूं।

+1

यदि आपको स्क्वायर मिलता है, तो आप एन्कोडिंग को ठीक से घोषित नहीं कर रहे हैं या फ़ाइल के गलत एन्कोडिंग नहीं कर रहे हैं। सुनिश्चित करें कि आप हमेशा यूटीएफ -8 का उपयोग करते हैं और यदि संभव हो, तो सामग्री-प्रकार: एप्लिकेशन/एक्सएमएल; अक्षरसेट = यूटीएफ -8 HTTP शीर्षलेख भेजें। यदि यह संभव नहीं है, तो दस्तावेज़ में जोड़ें। – Kornel

3

आपको अपने डीटीडी में एक इकाई घोषित करने की आवश्यकता नहीं है, या एक डीटीडी का उपयोग करें। आपको शायद चरित्र के यूनिकोड प्रतिनिधित्व का उपयोग करने की आवश्यकता नहीं है। आप निश्चित रूप से को सीडीएटीए अनुभाग का उपयोग करने की आवश्यकता नहीं है।

आपको स्ट्रिंग मैनिपुलेशन के साथ इसे बनाने की कोशिश करने के बजाय अपने एक्सएमएल बनाने के लिए एक डोम का उपयोग करना है। डीओएम आपके लिए इस समस्या को ठीक करेगा।

सी # में, इस कोड:

XmlDocument d = new XmlDocument(); 
d.LoadXml("<foo/>"); 
char c = (char)187; 
d.DocumentElement.InnerText = "Here's that character: " + c; 
Debug.WriteLine(d.OuterXml); 
d.DocumentElement.InnerText = "Here it is as an HTML entity: &raquo;"; 
Debug.WriteLine(d.OuterXml); 

इस उत्पादन का उत्पादन:

<foo>Here's that character: »</foo> 
<foo>Here it is as an HTML entity: &amp;raquo;</foo> 

आप पहली बार उदाहरण से देख सकते हैं, » चरित्र एक्सएमएल पाठ में पूरी तरह से कानूनी है। लेकिन मुझे नहीं लगता कि आप उस चरित्र का प्रतिनिधित्व करने की कोशिश कर रहे हैं।

मुझे लगता है कि आप रिपोर्ट किए गए त्रुटि संदेश के आधार पर दूसरे उदाहरण में क्या करने की कोशिश कर रहे हैं। आप वर्णों की स्ट्रिंग का प्रतिनिधित्व करने की कोशिश कर रहे हैं &raquo;। एक्सएमएल टेक्स्ट में वर्णों की स्ट्रिंग का प्रतिनिधित्व करने का सही तरीका एम्पर्सेंड से बचकर है; इस प्रकार: &amp;raquo;

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

एक और बात। यह काफी संभावना है कि आपके मूल प्रश्न में, जो अब "मैं उपयोग कर रहा हूं" पढ़ता हूं, जो वास्तव में टाइप किया गया है "मैं & raquo का उपयोग कर रहा हूं;"। वास्तविक पोस्ट ऐसा नहीं दिखता है, यद्यपि। यदि आपको मार्कडाउन में शाब्दिक रूप से पाठ का प्रतिनिधित्व करने की आवश्यकता है, तो इसे बैकटिक्स में संलग्न करें; अन्यथा, जब पोस्ट प्रस्तुत किया जाता है तो HTML इकाइयां उनके चरित्र प्रतिनिधित्व में परिवर्तित हो जाएंगी।

+0

मुझे आश्चर्य है कि इसे क्यों कम किया गया है। यह एक बिल्कुल सही जवाब है। – bortzmeyer

0

अपने HTML इकाई &raquo; को संख्यात्मक संदर्भ &#187; के साथ बस किसी भी XML और HTML में अच्छा है।

0

मैं अपने आप को इस तरह की जानकारी एक बहुत के लिए googling पाया है, तो जल्दी से एक देखने ऐसा करने में सक्षम होने का सरल प्रयोजन के लिए मेरी खुद की साइट पर एक मैट्रिक्स पद का फैसला किया:

http://martinkool.com/characters

उपयोग & # ...; वास्तव में फार्म।

0

आप उत्पादन दस्तावेज़ संख्यात्मक संदर्भ के बजाय नामित HTML इकाई &raquo; को रोकने के लिए, अपने स्टाइलशीट के लिए निम्न तत्वों को जोड़ने चाहते हैं (XSLT2.0 केवल):

<xsl:output use-character-maps="raquo.ent"/> 
<xsl:character-map name="raquo.ent"> 
    <xsl:output-character character="&#187;" string="&amp;raquo;"/> 
</xsl:character-map>