Fehler: Die Verarbeitungsanweisungszielübereinstimmung "[xX] [mM] [lL]" ist nicht zulässig


180

Dieser Fehler,

Die Zielanpassung der Verarbeitungsanweisung "[xX] [mM] [lL]" ist nicht zulässig

tritt immer dann auf, wenn ich eine XSLT-Seite starte, die wie folgt beginnt:

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

Hinweis : Ich habe alle führenden Leerzeichen vor der ersten Zeile entfernt, aber der Fehler tritt weiterhin auf!


1
Dieser Fehler betrifft nicht XSLT. Es bezieht sich auf das XML-Parsen im Allgemeinen. Überprüfen Sie nicht nur Ihre Haupt-XSLT-Datei, sondern auch alle enthaltenen / importierten XSLT-Dateien ( ../header.xsl) sowie das zu transformierende XML-Eingabedokument auf jede der drei Möglichkeiten, die ich in meiner Antwort unten aufführe .
kjhughes

Antworten:


364

Xerces-basierte Tools geben den folgenden Fehler aus

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

Wenn eine XML-Deklaration an einer anderen Stelle als am Anfang einer XML-Datei auftritt.

Dies ist eine gültige Diagnosemeldung. Andere XML-Parser sollten in dieser Situation eine ähnliche Fehlermeldung ausgeben.

Überprüfen Sie die folgenden Möglichkeiten, um das Problem zu beheben:

  1. Vor der Deklaration ist ein Leerzeichen oder ein anderer sichtbarer Inhalt vorhanden <?xml ?>.

    Lösung : Entfernen Sie Leerzeichen oder andere sichtbare Inhalte vor der XML-Deklaration.

  2. Einige unsichtbare Inhalt vorhanden ist, bevor die <?xml ?> Erklärung. Am häufigsten ist dies eine Byte Order Mark (BOM) .

    Lösung : Entfernen Sie die Stückliste mithilfe von Techniken, wie sie von der W3C-Seite in der Stückliste in HTML vorgeschlagen werden.

  3. Innerhalb des XML-Inhalts ist eine Streudeklaration <?xml ?>vorhanden. Dies kann passieren, wenn XML-Dateien programmgesteuert oder durch Ausschneiden und Einfügen kombiniert werden. Es kann nur eine <?xml ?>Deklaration in einer XML-Datei geben, und sie kann nur oben stehen.

    Lösung : Suchen Sie nach <?xmlGroß- und Kleinschreibung und entfernen Sie alle bis auf die oberste XML-Deklaration aus der Datei.


Wie würden Sie bei einem Streuner <? Xml tatsächlich die XML-Datei durchlaufen, um sie zu finden? Als würde die Verwendung von Saxophon- oder Stax-Parsern gut funktionieren (habe versucht, es mit Stax zu tun, aber es erkennt es nicht)
user2062207

Um eine streunende XML-Deklaration zu eliminieren, müssen Sie die Datei als Text und nicht als XML behandeln, da eine zusätzliche XML-Deklaration verhindert, dass das XML wohlgeformt ist . Verwenden Sie einen Texteditor oder öffnen Sie die Datei programmatisch und arbeiten auf sie als Text die Streu zu beseitigen <?xml ?>Erklärung , bevor es als XML - Datei zu behandeln.
kjhughes

4
Sie haben mein Mitgefühl, da zeitweise auftretende Probleme bekanntermaßen schwer zu beheben sind. Von hier aus kann ich jedoch nicht mehr helfen, als Ihnen zu sagen, dass dieser Fehler definitiv deterministisch ist : Es wird immer ein Fehler sein, wenn eine XML-Deklaration mehr als einmal oder an einer anderen Stelle als am Anfang einer XML-Datei angezeigt wird. Viel Glück.
kjhughes

1
Wenn Ihre XML-Nachricht als Zeichenfolge gespeichert ist, können Sie versuchen, die Zeichenfolge zu trimmen (), bevor Sie sie an Ihren SAX-Parser übergeben. Aus irgendeinem Grund erhielt ich XML-Antworten, die zu Beginn zusätzlichen Leerraum einführten, was beim Analysieren zu dem obigen Xerces-Fehler führte.
Robert Casey

1
Es ist ein alter Thread, aber dies könnte jemandem helfen: Nachdem wir eine XML-Datei manuell aus dem Browser kopiert und in eine lokale Textdatei kopiert und als XML gespeichert haben, haben wir den gleichen Fehler erhalten (die fragliche Datei war eine pom.xml und der Fehler wurde während eines Builds auf Gradle erhalten). Wir haben herausgefunden, dass oben in der XML-Datei eine leere Zeile steht, noch bevor das <? Xml> -Tag sie entfernt hat und es funktioniert hat!
JavaTec

13

Grund für mich ist 2 der folgenden Code in einer XML

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

2
Ich entferne Leerzeichen vor <? Xml-Versionen ... und das hat bei mir funktioniert.
xpagesbeast

1
Diese Antwort wurde bereits bereitgestellt : # 3: Lösung : Suchen Sie ohne <?xmlBerücksichtigung der Groß- und Kleinschreibung und entfernen Sie alle bis auf die oberste XML-Deklaration aus der Datei.
kjhughes

Kann bestätigen, dass jemand das Kopieren und Einfügen durcheinander gebracht hat.
fl0w

3

Es gab eine automatisch generierte Copyright-Nachricht XMLund eine leere Zeile vor dem <resources>Tag. Nachdem ich sie entfernt hatte, war mein Build erfolgreich.

Geben Sie hier die Bildbeschreibung ein


1
Das Entfernen von Kommentaren oder Leerzeichen vor der XML-Deklaration kann diesen Fehler beseitigen. Für das in Ihrem Bild gezeigte Dokument ist es jedoch nicht erforderlich, den Kommentar oder die Leerzeile nach der XML-Deklaration zu entfernen .
kjhughes

1

Ein weiterer Grund für den obigen Fehler ist eine beschädigte JAR-Datei. Ich habe den gleichen Fehler erhalten, aber für Junit beim Ausführen von Komponententests. Entfernen Sie das Glas und laden Sie es erneut herunter, um das Problem zu beheben.


0

In meinem Fall war ein falscher Pfad in einer Konfigurationsdatei: Datei wurde nicht gefunden (Pfad war falsch) und es kam mit dieser Ausnahme heraus:

Fehler beim Konfigurieren aus dem Eingabestream. Ursprüngliche Ursache war Die Zielanpassung der Verarbeitungsanweisung "[xX] [mM] [lL]" ist nicht zulässig.


0

Ich hatte ein ähnliches Problem mit 50.000 rdf / xml-Dateien in 5.000 Verzeichnissen (die Project Gutenberg-Katalogdatei). Ich habe es mit Aufruhr gelöst (in der Jenaer Distribution)

Das Verzeichnis lautet cache / epub / NN / nn.rdf (wobei NN eine Zahl ist).

im Verzeichnis über dem Verzeichnis, in dem sich alle Dateien befinden, dh im Cache

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

Dies führt möglicherweise zu vielen Warnungen, aber das Ergebnis liegt in einem Format vor, das in Jena geladen werden kann (über die Fuseki-Weboberfläche).

überraschend einfach (zumindest in diesem Fall).


0

Fügen Sie für PHP diese Codezeile ein, bevor Sie mit dem Drucken Ihres XML beginnen:

while(ob_get_level()) ob_end_clean();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.