Kesalahan: Target instruksi pemrosesan yang memproses “[xX] [mM] [lL]” tidak dibolehkan

181

Kesalahan ini,

Pencocokan target instruksi pemrosesan "[xX] [mM] [lL]" tidak diizinkan

terjadi setiap kali saya menjalankan halaman XSLT yang dimulai sebagai berikut:

<?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>

Catatan : Saya menghapus spasi utama sebelum baris pertama, tetapi kesalahan masih terjadi!

Java Player
sumber
1
Kesalahan ini tidak khusus untuk XSLT; ini berhubungan dengan parsing XML secara umum. Periksa tidak hanya file XSLT utama Anda, tetapi juga file XSLT yang disertakan / diimpor ( ../header.xsl) serta dokumen input XML yang sedang diubah, untuk masing-masing dari tiga kemungkinan yang saya daftarkan dalam jawaban saya di bawah ini .
kjhughes

Jawaban:

365

Alat berbasis Xerces akan memancarkan kesalahan berikut

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

ketika deklarasi XML ditemui mana saja selain di bagian atas file XML.

Ini adalah pesan diagnostik yang valid; parser XML lainnya harus mengeluarkan pesan kesalahan serupa dalam situasi ini.

Untuk memperbaiki masalah, periksa kemungkinan berikut:

  1. Beberapa ruang kosong atau konten lain yang terlihat ada sebelum <?xml ?> deklarasi.

    Penyelesaian : hapus ruang kosong atau konten apa pun lainnya yang terlihat sebelum deklarasi XML.

  2. Beberapa konten yang tidak terlihat ada sebelum <?xml ?> deklarasi. Paling umum ini adalah Byte Order Mark (BOM) .

    Resolusi : Hapus BOM menggunakan teknik seperti yang disarankan oleh halaman W3C pada BOM dalam HTML.

  3. Sebuah liar <?xml ?>deklarasi ada dalam konten XML. Ini bisa terjadi ketika file XML digabungkan secara terprogram atau melalui cut-and-paste. Hanya ada satu<?xml ?> deklarasi dalam file XML, dan itu hanya bisa di atas.

    Resolusi : Cari dengan <?xmlcara case-insensitive, dan hapus semua kecuali deklarasi XML atas dari file.

kjhughes
sumber
Untuk yang tersesat <? Xml, bagaimana Anda benar-benar pergi iterasi melalui file xml untuk menemukannya? Seperti akan menggunakan sesuatu seperti parser sax atau stax bekerja dengan baik (mencoba melakukannya dengan stax tetapi tidak mengenalinya)
user2062207
Untuk menghilangkan deklarasi XML tersesat, Anda harus memperlakukan file sebagai teks, bukan XML, karena deklarasi XML tambahan mencegah XML terbentuk dengan baik . Gunakan editor teks atau buka file secara terprogram dan operasikan sebagai teks untuk menghilangkan <?xml ?>deklarasi liar sebelum memperlakukannya sebagai file XML.
kjhughes
4
Anda memiliki simpati saya karena masalah yang terputus-putus sangat sulit untuk di-debug. Namun, saya tidak dapat membantu lebih dari sini selain untuk memberi tahu Anda bahwa kesalahan ini pasti bersifat deterministik : Ini akan selalu menjadi kesalahan untuk deklarasi XML untuk muncul lebih dari sekali atau di mana saja selain bagian atas file XML. Semoga berhasil.
kjhughes
1
Jika pesan XML Anda disimpan sebagai sebuah String, Anda dapat mencoba melakukan trim () pada String sebelum meneruskannya ke SAX Parser Anda. Untuk beberapa alasan saya mendapatkan respons XML yang memperkenalkan ruang ekstra putih di awal, yang menghasilkan kesalahan Xerces di atas ketika diuraikan.
Robert Casey
1
Ini utas lama, tetapi ini mungkin membantu seseorang: Setelah menyalin file xml secara manual dari browser dan menyalin paste ke file teks lokal dan menyimpannya sebagai xml, kami mendapatkan kesalahan yang sama (file tersebut adalah pom.xml dan kesalahannya diterima saat melakukan build on gradle). Kami menemukan bahwa ada baris kosong di bagian atas file xml, bahkan sebelum tag <? Xml>, dihapus dan berhasil!
JavaTec
13

Alasan saya adalah 2 dari kode berikut dalam satu xml

<?xml version="1.0" encoding="utf-8"?>
Anuj Jindal
sumber
2
Saya menghapus spasi di depan versi <? Xml ... dan itu berhasil untuk saya.
xpagesbeast
1
Jawaban ini sudah disediakan : # 3: Resolusi : Cari dengan <?xmlcara case-insensitive, dan hapus semua kecuali deklarasi XML teratas dari file.
kjhughes
Dapat mengonfirmasi, seseorang mengacaukan copy & paste.
fl0w
3

Ada pesan Hak Cipta yang dibuat secara otomatis di dalam XMLdan baris kosong sebelum <resources>tag, setelah saya menghapusnya, bangunan saya berhasil.

masukkan deskripsi gambar di sini

Hitesh Sahu
sumber
1
Penghapusan komentar atau spasi kosong sebelum deklarasi XML dapat menghilangkan kesalahan ini, tetapi untuk dokumen yang ditunjukkan pada gambar Anda, tidak perlu menghapus komentar atau baris kosong setelah deklarasi XML.
kjhughes
1

Alasan lain dari kesalahan di atas adalah file jar rusak. Saya mendapat kesalahan yang sama tetapi untuk Junit ketika menjalankan tes unit. Menghapus stoples dan mengunduhnya lagi memperbaiki masalah.

Peter T.
sumber
0

dalam kasus saya adalah jalur yang salah dalam file konfigurasi: file tidak ditemukan (path salah) dan keluar dengan pengecualian ini:

Kesalahan mengonfigurasi dari aliran input. Penyebab awalnya adalah Pencocokan target instruksi pemrosesan "[xX] [mM] [lL]" tidak diizinkan.

pikimota
sumber
0

Saya memiliki masalah serupa dengan 50.000 file rdf / xml di 5.000 direktori (file katalog Project Gutenberg). Saya menyelesaikannya dengan kerusuhan (dalam distribusi jena)

direktori ini adalah cache / epub / NN / nn.rdf (di mana NN adalah angka)

dalam direktori di atas direktori tempat semua file berada, yaitu dalam cache

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

Ini mungkin menghasilkan banyak peringatan tetapi hasilnya dalam format yang dapat dimuat ke jena (menggunakan antarmuka web fuseki).

sangat sederhana (setidaknya dalam hal ini).

pengguna855443
sumber
0

Untuk PHP, tuliskan baris kode ini sebelum Anda mulai mencetak XML Anda:

while(ob_get_level()) ob_end_clean();
Rumah pantai
sumber