错误:不允许匹配“ [xX] [mM] [lL]”的处理指令目标


180

这个错误

不允许与“ [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 2015年

Answers:


364

基于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文件中只能有一个声明,并且只能在顶部。

    解决方案:以 <?xml不区分大小写的方式搜索,然后从文件中删除除最上面的XML声明之外的所有声明。


对于流浪<?xml,您实际上将如何遍历xml文件以找到它?就像使用sax或stax解析器之类的方法一样可以正常工作(尝试使用stax进行操作,但无法识别)
user2062207 2014年

为了消除流浪XML声明,你必须将这个文件看作文本,而不是XML,因为一个额外的XML声明防止XML被形成良好。使用文本编辑器或以编程方式打开文件,然后以文本形式对其进行操作,以消除杂散<?xml ?>声明,然后再将其视为XML文件。
kjhughes 2014年

4
您很同情我,因为间歇性问题众所周知很难调试。但是,除了告诉您该错误绝对确定性的之外,我从这里没有更多帮助:XML声明出现在XML文件顶部以外的其他位置或其他位置,永远都是错误。祝好运。
kjhughes 2015年

1
如果XML消息存储为字符串,则可以在将字符串传递给SAX Parser之前尝试对它进行trim()。由于某种原因,我得到的XML响应在开始时就引入了额外的空格,导致解析时出现上述Xerces错误。
罗伯·凯西

1
它是一个旧线程,但是这可能对某人有帮助:从浏览器手动复制xml文件并将粘贴复制到本地文本文件并另存为xml后,我们得到了相同的错误(所涉及的文件是pom.xml,并且该错误是在gradle上进行构建时收到的)。我们发现,即使在<?xml>标记之前,xml文件顶部也有一个空行,将其删除并可以正常工作!
JavaTec

13

对我来说,原因是以下两个代码在一个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却是这样。删除jar并再次下载即可解决此问题。


0

在我的情况下,是配置文件中的路径错误:找不到文件(路径错误),并且出现此异常:

从输入流配置时出错。最初的原因是不允许匹配“ [xX] [mM] [lL]”的处理指令目标。


0

我在5,000个目录(Project Gutenberg目录文件)中的50,000个rdf / xml文件中遇到了类似的问题。我通过防暴解决了问题(在耶拿分发中)

目录为cache / epub / NN / nn.rdf(其中NN是数字)

在所有文件所在目录上方的目录中,即在高速缓存中

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

这可能会产生许多警告,但结果是可以加载到jena中的格式(使用fuseki Web界面)。

非常简单(至少在这种情况下)。


0

对于PHP,请在开始打印XML之前放置以下代码:

while(ob_get_level()) ob_end_clean();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.