Hata: “[xX] [mM] [lL]” ile eşleşen işleme talimatı hedefine izin verilmiyor


181

Bu hata,

"[XX] [mM] [lL]" ile eşleşen işleme talimatı hedefine izin verilmiyor

aşağıdaki gibi başlayan bir XSLT sayfası çalıştırdığınızda oluşur:

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

Not : İlk satırdan önce önde gelen boşlukları kaldırdım, ancak hata yine de oluşuyor!


1
Bu hata XSLT'ye özgü değildir; genel olarak XML ayrıştırma ile ilgilidir. Aşağıdaki cevabımda listelediğim üç olasılıktan her biri için yalnızca ana XSLT dosyanızı değil, dahil edilen / içe aktarılan XSLT dosyalarını ( ../header.xsl) ve dönüştürülen XML giriş belgesini de kontrol edin .
kjhughes

Yanıtlar:


365

Xerces tabanlı araçlar aşağıdaki hatayı verir

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

Bir zaman XML bildirimi karşılaşıldığında bir XML dosyasının en üstünde başka yerde daha.

Bu geçerli bir tanılama mesajıdır; diğer XML ayrıştırıcıları bu durumda benzer bir hata iletisi vermelidir.

Sorunu gidermek için aşağıdaki olasılıkları kontrol edin:

  1. Bildiriden önce bir miktar boşluk veya görünür başka bir içerik var .<?xml ?>

    Çözüm : XML bildiriminden önce boş alanı veya diğer görünür içeriği kaldırın.

  2. Bazı görünmez içerikler beyandan önce mevcuttur <?xml ?> . En yaygın olarak bu bir Bayt Düzeni İşareti'dir (BOM) .

    Çözüm : Malzeme Listesinde HTML'deki W3C sayfası tarafından önerilenler gibi teknikler kullanarak Malzeme Listesini kaldırın .

  3. Bir sokak <?xml ?>bildirimi XML içeriğinde mevcuttur. Bu, XML dosyaları programlı olarak veya kes ve yapıştır ile birleştirildiğinde meydana gelebilir. <?xml ?>Bir XML dosyasında yalnızca bir bildirim olabilir ve yalnızca en üstte olabilir.

    Çözüm : Büyük / <?xmlküçük harfe duyarlı olmayan bir şekilde arama yapın ve üst XML bildirimi hariç tümünü dosyadan kaldırın.


Bir kaçak <? Xml için, bulmak için xml dosyası üzerinden yineleme yapmaya nasıl devam edersiniz? Gibi sax veya stax parsers gibi bir şey kullanmak iyi çalışır (stax ile yapmayı denedim ama bunu tanımıyor)
user2062207

Bir başıboş XML bildirimini ortadan kaldırmak için, dosyayı XML olarak değil, XML olarak ele almanız gerekir, çünkü ekstra bir XML bildirimi XML'nin iyi biçimlendirilmesini engeller . Bir metin düzenleyicisi kullanın veya dosyayı programlı olarak açın ve XML dosyası olarak işlemeden önce kaçak bildirimi ortadan kaldırmak için metin olarak çalıştırın . <?xml ?>
kjhughes

4
Aralıklı sorunların hatalarını ayıklamak zor olduğu için sempatilerim var. Ancak, bu hatanın kesinlikle belirleyici olduğunu söylemek dışında buradan daha fazla yardım edemem : Bir XML bildiriminin bir XML dosyasının üstünden başka bir kereden fazla veya herhangi bir yerde görünmesi her zaman bir hata olacaktır . İyi şanslar.
kjhughes

1
XML iletiniz bir Dize olarak depolanmışsa, SAX Ayrıştırıcısına iletmeden önce Dize üzerinde bir trim () yapmayı deneyebilirsiniz. Nedense başlangıçta fazladan boşluk bırakan XML yanıtları alıyordum, bu da ayrıştırıldığında yukarıdaki Xerces hatasıyla sonuçlandı.
Robert Casey

1
Bu eski bir iş parçacığı, ama bu birine yardımcı olabilir: Bir xml dosyasını tarayıcıdan elle kopyalayıp yerel metin dosyasına kopyalayıp xml olarak kaydettikten sonra aynı hatayı aldık (söz konusu dosya bir pom.xml ve hata oldu) Gradle üzerinde bir yapı yaparken alındı). Xml dosyasının üstünde, <? Xml> etiketinden önce bile boş bir satır olduğunu öğrendik ve kaldırdık!
JavaTec

13

Benim için neden bir xml aşağıdaki kod 2

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

2
<? Xml sürümlerinin önündeki boşlukları kaldırdım ... ve bu benim için çalıştı.
xpagesbeast

1
Bu yanıt zaten sağlandı : # 3: Çözüm : Büyük / küçük harfe duyarlı olmayan bir şekilde arayın <?xmlve üst XML bildirimi dışında tümünü XML dosyasından kaldırın.
2018

Onaylayabilir, biri kopyala ve yapıştır'ı bozdu.
fl0w

3

Etiketinde otomatik olarak oluşturulan Telif Hakkı mesajı XMLve <resources>etiketten önce boş bir satır vardı , kaldırdıktan sonra derlemem başarılı oldu.

resim açıklamasını buraya girin


1
XML bildiriminden önce yorumların veya boşlukların kaldırılması bu hatayı ortadan kaldırabilir, ancak görüntünüzde gösterilen belge için , XML bildiriminden sonra yorumu veya boş satırı kaldırmanıza gerek yoktur .
kjhughes

1

Yukarıdaki hatanın başka bir nedeni de jar dosyası bozuk. Aynı hatayı aldım ama birim testleri çalıştırırken Junit için. Kavanozun çıkarılması ve tekrar indirilmesi sorunu çözdü.


0

benim durumumda bir yapılandırma dosyasında yanlış bir yol vardı: dosya bulunamadı (yol yanlıştı) ve bu istisna ile çıktı:

Giriş akışından yapılandırma hatası. İlk neden şuydu: "[xX] [mM] [lL]" ile eşleşen işleme talimatı hedefine izin verilmiyor.


0

5.000 dizinde (Project Gutenberg katalog dosyası) 50.000 rdf / xml dosyasıyla benzer bir sorun yaşadım. İsyanla çözdüm (jena dağıtımında)

dizin önbellek / epub / NN / nn.rdf'dir (burada NN bir sayıdır)

tüm dosyaların bulunduğu dizinin üzerindeki dizinde, yani önbellekte

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

Bu muhtemelen birçok uyarı üretir, ancak sonuç jena'ya yüklenebilecek bir formattadır (fuseki web arayüzü kullanılarak).

şaşırtıcı derecede basit (en azından bu durumda).


0

PHP için, XML'inizi yazdırmaya başlamadan önce bu kod satırını girin:

while(ob_get_level()) ob_end_clean();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.