त्रुटि: प्रसंस्करण निर्देश लक्ष्य "[xX] [mM] [lL]" से मेल खाने की अनुमति नहीं है


180

यह गलती,

प्रसंस्करण निर्देश लक्ष्य "[xX] [mM] [lL]" से मेल खाने की अनुमति नहीं है

जब भी मैं एक XSLT पृष्ठ चलाता हूं जो निम्नानुसार शुरू होता है:

<?xml version="1.0" encoding="windows-1256"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:include href="../header.xsl"/>
  <xsl:template match="/">
    <xsl:call-template name="pstyle"/>
    <xsl:call-template name="Validation"/>
    <xsl:variable name="strLang">
      <xsl:value-of select="//lang"/>
    </xsl:variable>
    <!-- ////////////// Page Title ///////////// -->
    <title>
        <xsl:value-of select="//ListStudentFinishedExam.Title"/>
    </title>

नोट : मैंने पहली पंक्ति से पहले किसी भी अग्रणी स्थान को हटा दिया है, लेकिन त्रुटि अभी भी होती है!


1
यह त्रुटि XSLT के लिए विशेष नहीं है; यह सामान्य रूप से XML पार्सिंग से संबंधित है। नीचे दिए गए मेरे उत्तर में सूचीबद्ध तीन संभावनाओं में से प्रत्येक के लिए न केवल अपनी मुख्य एक्सएसएलटी फाइल, बल्कि किसी भी शामिल / आयातित एक्सएसएलटी फाइल ( ../header.xsl) के साथ-साथ एक्सएमएल इनपुट डॉक्यूमेंट में तब्दील होने की भी जांच करें
kjhughes

जवाबों:


364

Xerces- आधारित उपकरण निम्नलिखित त्रुटि का उत्सर्जन करेंगे

The processing instruction target matching "[xX][mM][lL]" is not allowed.

जब एक XML घोषणा एक XML फ़ाइल के शीर्ष पर के अलावा कहीं भी सामना करना पड़ता है

यह एक वैध निदान संदेश है; अन्य XML पार्सर को इस स्थिति में एक समान त्रुटि संदेश जारी करना चाहिए।

समस्या को ठीक करने के लिए, निम्न संभावनाओं की जाँच करें:

  1. कुछ खाली जगह या अन्य दृश्यमान सामग्री <?xml ?> घोषणा से पहले मौजूद है ।

    रिज़ॉल्यूशन : XML घोषणा से पहले रिक्त स्थान या किसी अन्य दृश्यमान सामग्री को हटा दें।

  2. इससे पहले कुछ अदृश्य सामग्री मौजूद है<?xml ?> घोषणा । आमतौर पर यह एक बाइट ऑर्डर मार्क (BOM) है

    संकल्प : HTML में BOM पर W3C पेज द्वारा सुझाई गई तकनीकों का उपयोग करके BOM निकालें

  3. <?xml ?>एक्सएमएल सामग्री के भीतर आवारा घोषणा मौजूद है। यह तब हो सकता है जब XML फ़ाइलों को प्रोग्रामेटिक रूप से या कट-एंड-पेस्ट के माध्यम से जोड़ा जाता है। <?xml ?>XML फ़ाइल में केवल एक घोषणा हो सकती है , और यह केवल शीर्ष पर हो सकती है।

    रिज़ॉल्यूशन : <?xmlकेस-असंवेदनशील तरीके से खोजें, और फ़ाइल से सभी लेकिन शीर्ष XML घोषणा को हटा दें।


एक आवारा <? Xml के लिए, आप वास्तव में इसे खोजने के लिए xml फ़ाइल के माध्यम से पुनरावृत्ति कैसे करेंगे? जैसे सैक्स या स्टेक्स पार्सर का उपयोग करना ठीक काम करेगा (इसे
स्टैक्स के

एक आवारा XML घोषणा को खत्म करने के लिए, आपको फ़ाइल को पाठ के रूप में व्यवहार करना होगा, न कि XML, क्योंकि एक अतिरिक्त XML घोषणा XML को अच्छी तरह से बनने से रोकती है । पाठ संपादक का उपयोग करें या प्रोग्राम को फ़ाइल खोलें और इसे XML फ़ाइल के रूप में मानने से पहले आवारा घोषणा को समाप्त करने के लिए पाठ के रूप में संचालित करें । <?xml ?>
khhughes

4
आपके पास मेरी सहानुभूति है क्योंकि आंतरायिक समस्याएं डिबग करने के लिए कुख्यात हैं। हालाँकि, मैं आपको यह बताने के अलावा कि यहाँ से अधिक मदद नहीं कर सकता कि यह त्रुटि निश्चित रूप से नियतात्मक है : यह XML घोषणा के लिए हमेशा एक XML फ़ाइल के शीर्ष की तुलना में एक या एक से अधिक बार प्रकट होने के लिए एक त्रुटि होगी । सौभाग्य।
khhughes

1
यदि आपका XML संदेश स्ट्रिंग के रूप में संग्रहीत है, तो आप अपने SAX पार्सर को पास करने से पहले स्ट्रिंग पर एक ट्रिम () करने का प्रयास कर सकते हैं। किसी कारण से मुझे एक्सएमएल प्रतिक्रियाएं मिल रही थीं, जिन्होंने शुरुआत में अतिरिक्त सफेद स्थान पेश किया, जिसके परिणामस्वरूप पार्स होने पर उपरोक्त Xerces त्रुटि हुई।
रॉबर्ट केसी

1
इसका पुराना धागा, लेकिन यह किसी की मदद कर सकता है: ब्राउज़र से xml फ़ाइल को मैन्युअल रूप से कॉपी करने और स्थानीय टेक्स्ट फ़ाइल में पेस्ट करने और xml के रूप में सहेजने के बाद, हमें वही त्रुटि मिली (प्रश्न में फ़ाइल pom.xml और त्रुटि थी का निर्माण करते समय प्राप्त किया गया था। हमें पता चला कि xml फ़ाइल के शीर्ष पर एक खाली लाइन थी, <xml> टैग से पहले भी, इसे हटा दिया और यह काम कर गया!
जावाटेक

13

मेरे लिए कारण एक xml में निम्नलिखित में से 2 कोड है

<?xml version="1.0" encoding="utf-8"?>

2
मैं <? Xml संस्करण ... के सामने रिक्त स्थान हटाता हूं ... और यह मेरे लिए काम करता है।
xpagesbeast

1
इस उत्तर था पहले से ही प्रदान की : # 3: संकल्प : के लिए खोज <?xmlएक केस-संवेदी ढंग से, और सभी लेकिन फ़ाइल से शीर्ष XML घोषणा को हटा दें।
kjhughes

पुष्टि कर सकते हैं, किसी ने कॉपी और पेस्ट गड़बड़ कर दी।
fl0w

3

टैग XMLसे पहले ऑटो जनरेट किया गया कॉपीराइट संदेश और एक रिक्त पंक्ति में था <resources>, एक बार जब मैंने इसे हटा दिया तो मेरा निर्माण सफल रहा।

यहां छवि विवरण दर्ज करें


1
एक्सएमएल घोषणा से पहले टिप्पणियों या व्हाट्सएप को हटाने से यह त्रुटि समाप्त हो सकती है, लेकिन आपकी छवि में दिखाए गए दस्तावेज़ के लिए, एक्सएमएल घोषणा के बाद टिप्पणी या रिक्त लाइन को हटाने की कोई आवश्यकता नहीं है ।
kjhughes

1

उपरोक्त त्रुटि का एक अन्य कारण भ्रष्ट फ़ाइल है। मुझे एक ही त्रुटि मिली लेकिन यूनिट टेस्ट चलाने के दौरान जुनित के लिए। जार को हटाने और इसे फिर से डाउनलोड करने से समस्या ठीक हो जाती है।


0

मेरे मामले में एक कॉन्फ़िगर फ़ाइल में एक गलत पथ था: फ़ाइल नहीं मिली (पथ गलत था) और यह इस अपवाद के साथ सामने आया:

इनपुट स्ट्रीम से कॉन्फ़िगर करने में त्रुटि। प्रारंभिक कारण प्रसंस्करण निर्देश लक्ष्य मिलान "[xX] [mM] [lL]" की अनुमति नहीं है।


0

मैं 5,000 निर्देशिकाओं (प्रोजेक्ट गुटेनबर्ग कैटलॉग फ़ाइल) में 50,000 rdf / xml फ़ाइलों के साथ एक समान मुद्दा था। मैंने इसे दंगा (जेना वितरण में) के साथ हल किया

निर्देशिका कैश / epub / NN / nn.rdf है (जहां NN एक संख्या है)

डायरेक्टरी के ऊपर की डायरेक्टरी में जहाँ सभी फाइल्स हैं, यानी कैशे में

riot epub/*/*.rdf --output=turtle > allTurtle.ttl

यह संभवतः कई चेतावनियां पैदा करता है लेकिन परिणाम एक प्रारूप में होता है जिसे जेना (फ्यूसी वेब इंटरफ़ेस का उपयोग करके) में लोड किया जा सकता है।

आश्चर्यजनक रूप से सरल (कम से कम इस मामले में)।


0

PHP के लिए, अपने XML को प्रिंट करने से पहले कोड की इस लाइन को डालें:

while(ob_get_level()) ob_end_clean();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.