エラー:「[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入力文書は、変換されるごとに3つの以下の私の答えで可能性Iリスト
kjhughes

回答:


365

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ファイルには宣言を1つだけ含めることができ、先頭にのみ置くことができます。

    解決策<?xml大文字と小文字を区別しない方法で検索し 、先頭のXML宣言以外のすべてをファイルから削除します。


散在する<?xmlの場合、実際にどのようにxmlファイルを反復処理して見つけるのですか?saxやstaxパーサーのようなものを使用すると
うまくいきます(staxで

抜けたXML宣言を排除するには、ファイルをXMLではなくテキストとして扱う必要があります。余分なXML宣言により、XMLが整形式にならないためです。テキストエディターを使用するか、ファイルをプログラムで開いてテキストとして操作し、XMLファイルとして扱う前に<?xml ?>宣言を取り除きます。
kjhughes 2014

4
断続的な問題はデバッグが難しいことで有名です。しかし、私はこのエラーがあることを伝えるために以上に、ここで他から支援することはできません間違いなく決定論:なります常に複数回表示されるようにXML宣言のエラーであるか、またはXMLファイルの先頭以外の場所。幸運を。
kjhughes 2015年

1
XMLメッセージが文字列として格納されている場合は、SAXパーサーに渡す前に、文字列に対してtrim()を実行してみてください。何らかの理由で、最初に余分な空白を導入するXML応答を取得していたため、解析時に上記のXercesエラーが発生しました。
Robert Casey

1
その古いスレッドですが、これは誰かを助けるかもしれません:ブラウザーからxmlファイルを手動でコピーし、ローカルテキストファイルに貼り付けてコピーし、xmlとして保存した後、同じエラーが発生しました(問題のファイルはpom.xmlであり、エラーGradleでビルドを実行中に受信されました)。<?xml>タグの前であっても、xmlファイルの上部に空の行があり、それを削除して機能したことがわかりました。
JavaTec 2018年

13

私の理由は、1つのxml内の次のコードの2つです。

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

2
<?xmlバージョンの前にあるスペースを削除すると、うまくいきました。
xpagesbeast

1
この回答はすでに提供さています#3:解決策大文字と小文字を区別しない方法で検索<?xmlし、ファイルから先頭のXML宣言以外をすべて削除します。
kjhughes

確認できました。誰かがコピーと貼り付けを間違えました。
fl0w

3

自動生成された著作権メッセージXML<resources>タグの前の空白行がありましたが、それを削除すると、ビルドは成功しました。

ここに画像の説明を入力してください


1
XML宣言のにコメントまたは空白を削除すると、このエラーは解消されますが、画像に表示されているドキュメントの場合、XML宣言の後にあるコメントまたは空白行を削除する必要はありません。
kjhughes

1

上記のエラーの別の理由は、破損したjarファイルです。同じエラーが発生しましたが、ユニットテストを実行するときにJunitについてです。jarを削除して再度ダウンロードすると、問題が解決します。


0

私の場合、設定ファイルのパスが間違っていました:ファイルが見つかりませんでした(パスが間違っていました)、次の例外が出ました:

入力ストリームからの構成エラー。最初の原因は「[xX] [mM] [lL]」に一致する処理命令ターゲットは許可されていませんでした。


0

5,000のディレクトリにある50,000のrdf / xmlファイル(Project Gutenbergカタログファイル)でも同様の問題がありました。私は暴動でそれを解決しました(イエナのディストリビューション)

ディレクトリはcache / epub / NN / nn.rdfです(NNは数字です)

すべてのファイルがあるディレクトリの上のディレクトリ、つまりキャッシュ内

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

これにより多くの警告が生成される可能性がありますが、結果はイェーナにロードできる形式です(fuseki Webインターフェースを使用)。

驚くほど簡単です(少なくともこの場合)。


0

PHPの場合、XMLの印刷を開始する前に次のコード行を挿入します。

while(ob_get_level()) ob_end_clean();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.