Помилка: ціль інструкції з обробки, що відповідає "[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-парсерів, добре працює (спробував це зробити зі стаксом, але він не розпізнає)
user2062207

Щоб усунути бродячу декларацію XML, ви повинні ставитися до файлу як до тексту, а не до XML, оскільки додаткова декларація XML не дозволяє добре сформувати XML . Використовуйте текстовий редактор або відкрийте файл програмно і оперуйте ним як текстом, щоб усунути бродячу <?xml ?>декларацію, перш ніж розглядати її як файл XML.
kjhughes

4
У вас є мої симпатії, оскільки переривчасті проблеми, як відомо, важко налагодити. Однак я не можу допомогти більше ніж тут, крім того, щоб сказати вам, що ця помилка, безумовно, є детермінованою : це завжди буде помилкою для того, щоб декларація XML з’являлася більше одного разу або деінде, окрім верху файлу XML. Удачі.
kjhughes

1
Якщо ваше XML-повідомлення зберігається як String, ви можете спробувати зробити обрізку () на String, перш ніж передати його на свій SAX Parser. Чомусь я отримував відповіді XML, які вводили зайвий пробіл на початку, що призводило до вищезгаданої помилки Xerces під час розбору.
Роберт Кейсі

1
Це стара нитка, але це може комусь допомогти: Після копіювання файлу xml з браузера та копіювання вставки в локальний текстовий файл та збереження у вигляді XML ми отримали ту саму помилку (файл, про який йде мова, був pom.xml та помилка був отриманий під час створення будівлі на gradle). Ми з’ясували, що вгорі файлу xml був порожній рядок, ще до того, як тег <? Xml> видалив його, і він працював!
JavaTec

13

Причина для мене 2 наступного коду в одному xml

<?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 при запуску одиничних тестів. Виймаючи банку та завантажуючи її знову вирішіть проблему.


0

у моєму випадку був неправильний шлях у файлі config: файл не знайдено (шлях був неправильним), і він вийшов за цим винятком:

Помилка налаштування з вхідного потоку. Початковою причиною було узгодження цілі інструкції з обробки "[xX] [mM] [lL]" заборонено.


0

У мене була подібна проблема з 50 000 файлами rdf / xml у 5000 каталогах (файл каталогу Gutenberg). Я вирішив це з бунту (в роздачі jena)

каталог кеш / epub / NN / nn.rdf (де NN - число)

в каталозі над каталогом, де всі файли, тобто в кеші

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

Це може призвести до багатьох попереджень, але результат у форматі, який можна завантажити в jena (за допомогою веб-інтерфейсу fuseki).

напрочуд просто (принаймні в цьому випадку).


0

Для PHP введіть цей рядок коду перед тим, як розпочати друк XML:

while(ob_get_level()) ob_end_clean();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.