ข้อผิดพลาด: ไม่อนุญาตให้ใช้คำสั่งประมวลผลเป้าหมายที่ตรงกับ“ [xX] [mM] [lL]”


181

ข้อผิดพลาดนี้

ไม่อนุญาตให้ใช้เป้าหมายการเรียนการสอนที่ตรงกับ "[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 โดยทั่วไป ตรวจสอบไม่ได้เป็นเพียงไฟล์ของคุณหลัก XSLT แต่ยังรวมถึงการใด ๆ / นำเข้าไฟล์ XSLT ( ../header.xsl) เช่นเดียวกับเอกสารการป้อนข้อมูล XML ที่ถูกเปลี่ยนสำหรับแต่ละสามความเป็นไปได้ในรายการฉันในคำตอบของฉันด้านล่าง
kjhughes

คำตอบ:


365

เครื่องมือที่ใช้ Xerces จะปล่อยข้อผิดพลาดต่อไปนี้

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

เมื่อมีการประกาศ XMLพบที่อื่นนอกเหนือจากที่ด้านบนของไฟล์ XML

นี่คือข้อความวินิจฉัยที่ถูกต้อง ตัวแยกวิเคราะห์ XML อื่น ๆ ควรออกข้อความแสดงข้อผิดพลาดที่คล้ายกันในสถานการณ์นี้

เพื่อแก้ไขปัญหาให้ตรวจสอบความเป็นไปได้ดังต่อไปนี้:

  1. มีพื้นที่ว่างเปล่าหรือเนื้อหาที่มองเห็นได้อื่นอยู่ก่อนการ ประกาศ<?xml ?>

    การแก้ไข : ลบพื้นที่ว่างหรือเนื้อหาที่มองเห็นได้อื่น ๆ ก่อนการประกาศ XML

  2. บางคนมองไม่เห็นเนื้อหาที่มีอยู่ก่อนที่จะมี<?xml ?> การประกาศ มากที่สุดนี้เป็นมาร์คสั่งซื้อไบต์ (BOM)

    การแก้ไข : ลบ BOM โดยใช้เทคนิคเช่นที่แนะนำโดยหน้า W3C ใน BOM ใน HTML

  3. มีการประกาศหลงทาง<?xml ?>ภายในเนื้อหา XML สิ่งนี้สามารถเกิดขึ้นได้เมื่อไฟล์ XML ถูกรวมโดยทางโปรแกรมหรือผ่านการตัดและวาง สามารถมีได้หนึ่ง<?xml ?>การประกาศในไฟล์ XML และสามารถอยู่ที่ด้านบนสุดเท่านั้น

    การแก้ปัญหา : ค้นหาตาม <?xmlตัวพิมพ์ใหญ่ - เล็กและลบทั้งหมดยกเว้นการประกาศ XML บนสุดจากไฟล์


สำหรับจรจัด <? xml คุณจะวนซ้ำไฟล์ xml เพื่อค้นหาได้อย่างไร เช่นจะใช้บางสิ่งบางอย่างเช่น sax หรือ stax parsers ทำงานได้ดี (ลองทำด้วย stax แต่ไม่รู้จัก)
user2062207

เพื่อขจัดประกาศ XML จรจัดคุณต้องรักษาแฟ้มเป็นข้อความไม่ XML เพราะประกาศ XML พิเศษป้องกันไม่ให้ XML จากการถูกรูปแบบที่ดี ใช้เท็กซ์เอดิเตอร์หรือเปิดไฟล์โดยทางโปรแกรมและดำเนินการกับมันเป็นข้อความเพื่อกำจัดการ<?xml ?>ประกาศเลย์เอาต์ก่อนที่จะถือเป็นไฟล์ XML
kjhughes

4
คุณมีความเห็นอกเห็นใจของฉันเป็นปัญหาที่ไม่สม่ำเสมอเป็นเรื่องยากที่จะแก้ปัญหาอย่างฉาวโฉ่ อย่างไรก็ตามฉันไม่สามารถช่วยเหลือได้มากกว่าที่นี่เพื่อบอกคุณว่าข้อผิดพลาดนี้กำหนดขึ้นแน่นอน : มันจะเป็นข้อผิดพลาดเสมอสำหรับการประกาศ XML ให้ปรากฏมากกว่าหนึ่งครั้งหรือที่ใดก็ตามที่นอกเหนือจากด้านบนของไฟล์ XML โชคดี.
kjhughes

1
หากข้อความ XML ของคุณถูกจัดเก็บเป็นสตริงคุณสามารถลองตัด () บนสตริงก่อนส่งผ่านไปยัง SAX Parser ของคุณ ด้วยเหตุผลบางอย่างฉันได้รับการตอบสนอง XML ที่แนะนำพื้นที่สีขาวเพิ่มเติมในช่วงเริ่มต้นซึ่งส่งผลให้เกิดข้อผิดพลาด Xerces ข้างต้นเมื่อแยกวิเคราะห์
Robert Casey

1
เป็นเธรดเก่า แต่สิ่งนี้อาจช่วยให้ใครบางคน: หลังจากคัดลอกไฟล์ xml จากเบราว์เซอร์ด้วยตนเองและคัดลอกการวางลงในไฟล์ข้อความในเครื่องและบันทึกเป็น xml เรามีข้อผิดพลาดเดียวกัน (ไฟล์ที่สงสัยคือ pom.xml และข้อผิดพลาด ได้รับขณะทำการ build บน gradle) เราพบว่ามีบรรทัดว่างที่ด้านบนของไฟล์ xml แม้กระทั่งก่อนแท็ก <? xml> ลบออกแล้วก็ใช้งานได้!
JavaTec

13

เหตุผลสำหรับฉันคือ 2 รหัสต่อไปนี้ในหนึ่ง xml

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

2
ฉันลบช่องว่างด้านหน้า <? xml version ... และนั่นใช้ได้สำหรับฉัน
xpagesbeast

1
คำตอบนี้มีให้แล้ว : # 3: การแก้ไข : ค้นหา<?xmlในกรณีที่ไม่คำนึงถึงขนาดตัวพิมพ์และลบทั้งหมดยกเว้นการประกาศ XML บนสุดจากไฟล์
kjhughes

สามารถยืนยันได้มีคนทำสำเนา & วาง
fl0w

3

มีข้อความลิขสิทธิ์ที่สร้างขึ้นโดยอัตโนมัติXMLและมีบรรทัดว่างก่อน<resources>แท็กเมื่อฉันลบออกบิลด์ของฉันก็สำเร็จ

ป้อนคำอธิบายรูปภาพที่นี่


1
การลบความคิดเห็นหรือช่องว่างก่อนการประกาศ XML สามารถกำจัดข้อผิดพลาดนี้ แต่สำหรับเอกสารที่แสดงในรูปภาพของคุณไม่จำเป็นต้องลบความคิดเห็นหรือบรรทัดว่างหลังจากการประกาศ XML
kjhughes

1

อีกสาเหตุหนึ่งของข้อผิดพลาดดังกล่าวคือไฟล์ jar เสียหาย ฉันได้รับข้อผิดพลาดเดียวกัน แต่สำหรับ Junit เมื่อทำการทดสอบหน่วย การลบ jar และดาวน์โหลดอีกครั้งช่วยแก้ไขปัญหาได้


0

ในกรณีของฉันเป็นเส้นทางที่ผิดในไฟล์ config: ไม่พบไฟล์ (เส้นทางผิด) และมันออกมาพร้อมกับข้อยกเว้นนี้:

เกิดข้อผิดพลาดในการกำหนดค่าจากอินพุตสตรีม สาเหตุเริ่มต้นคือไม่อนุญาตให้ใช้การประมวลผลเป้าหมายการจับคู่ "[xX] [mM] [lL]"


0

ฉันมีปัญหาที่คล้ายกันกับ 50,000 ไฟล์ rdf / xml ใน 5,000 ไดเรกทอรี (ไฟล์แค็ตตาล็อกโครงการกูเทนแบร์ก) ฉันแก้ไขด้วยจลาจล (ในการกระจาย jena)

ไดเรกทอรีคือแคช / epub / NN / nn.rdf (โดยที่ NN คือตัวเลข)

ในไดเรกทอรีด้านบนไดเรกทอรีที่ไฟล์ทั้งหมดคือในแคช

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

สิ่งนี้ทำให้เกิดคำเตือนจำนวนมาก แต่ผลลัพธ์นั้นอยู่ในรูปแบบที่สามารถโหลดลงใน jena (โดยใช้เว็บอินเตอร์เฟส Ffki)

เรียบง่ายอย่างน่าประหลาดใจ (อย่างน้อยในกรณีนี้)


0

สำหรับ PHP ให้ใส่รหัสบรรทัดนี้ก่อนที่จะเริ่มพิมพ์ XML ของคุณ:

while(ob_get_level()) ob_end_clean();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.