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

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

提问人:Eslam Hamdy 提问时间:11/10/2013 最后编辑:kjhughesEslam Hamdy 更新时间:12/6/2022 访问量:338922

问:

这个错误,

不允许匹配“[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>

注意:我删除了第一行之前的所有前导空格,但仍然出现错误!

Java XML XSLT

评论

4赞 kjhughes 12/11/2015
此错误并非 XSLT 所特有,它通常与 XML 分析有关。不仅要检查您的主 XSLT 文件,还要检查任何包含/导入的 XSLT 文件 () 以及正在转换的 XML 输入文档,以了解我在下面的答案中列出的三种可能性中的每一种../header.xsl
3赞 Dinidu Hewage 5/4/2021
根据我的经验,不小心在文件的开头添加了一个新的空行。删除后,它工作正常。所以我同意第一条评论。

答:

534赞 kjhughes 11/11/2013 #1

基于 Xerces 的工具将发出以下错误

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

当在 XML 文件顶部以外的任何地方遇到 XML 声明时。

这是一条有效的诊断消息;在这种情况下,其他 XML 分析器应发出类似的错误消息。

若要更正该问题,请检查以下可能性:

  1. <?xml?>声明之前存在一些空格或其他可见内容。

    解决方法:删除空白或任何其他空白 XML 声明之前的可见内容。

  2. 在 <?xml?> 声明之前存在一些不可见的内容。最常见的是字节顺序标记 (物料清单)。

    解决方法: 使用 W3C 建议的技术删除 BOM HTML 中 BOM 上的页面。

  3. XML 内容中存在一个杂散的 <?xml ?> 声明。当 XML 文件以编程方式组合或 通过剪切和粘贴。只能有一个声明 在 XML 文件中,它只能位于顶部。<?xml ?>

    解决方法:以不区分大小写的方式搜索,并删除除顶部 XML 之外的所有 XML 文件中的声明。<?xml

评论

0赞 user2062207 11/11/2014
对于杂散的 <?xml,您实际上将如何遍历 xml 文件以找到它?就像使用萨克斯或 stax 解析器之类的东西一样工作正常(尝试使用 stax 进行操作,但它无法识别它)
0赞 kjhughes 11/12/2014
若要消除杂散的 XML 声明,必须将文件视为文本,而不是 XML,因为额外的 XML 声明会阻止 XML 格式正确。在将文件视为 XML 文件之前,使用文本编辑器或以编程方式打开文件并将其作为文本进行操作,以消除杂散的 <?xml?> 声明。
4赞 kjhughes 6/12/2015
你有我的同情,因为间歇性问题是出了名的难以调试。但是,我在这里只能告诉你,这个错误绝对是确定性的:XML 声明出现不止一次或出现在 XML 文件顶部以外的任何地方,这始终是一个错误。祝你好运。
3赞 Robert Casey 8/27/2016
如果您的 XML 消息存储为 String,您可以尝试在将 String 传递给 SAX 解析器之前对 String 执行 trim()。出于某种原因,我收到的 XML 响应在开始时引入了额外的空格,这导致了解析时的上述 Xerces 错误。
1赞 JavaTec 1/20/2018
这是一个旧线程,但这可能会对某人有所帮助:从浏览器手动复制 xml 文件并复制粘贴到本地文本文件并另存为 xml 后,我们遇到了相同的错误(有问题的文件是 pom.xml,并且在 gradle 上进行构建时收到错误)。我们发现 xml 文件的顶部有一个空行,甚至在 <?xml> 标签之前,删除了它并且它起作用了!
1赞 Peter Tadros 2/16/2017 #2

上述错误的另一个原因是jar文件损坏。我在运行单元测试时遇到了同样的错误,但对于 Junit。删除 jar 并再次下载它解决了该问题。

7赞 Hitesh Sahu 5/20/2018 #3

有自动生成的版权消息,标签前有一个空行,一旦我删除了它,我的构建就成功了。XML<resources>

enter image description here

评论

3赞 kjhughes 6/1/2018
删除 XML 声明前的注释或空格可以消除此错误,但对于图像中显示的文档,无需删除 XML 声明后的注释或空行。
0赞 pikimota 5/22/2018 #4

就我而言,配置文件中的路径错误:找不到文件(路径错误),并且出现以下异常:

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

1赞 user855443 9/4/2018 #5

我在 5,000 个目录中的 5,000 个 rdf/xml 文件(Project Gutenberg 目录文件)中遇到了类似的问题。我用暴动解决了它(在耶拿发行版中)

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

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

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

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

出乎意料的简单(至少在这种情况下)。

0赞 Beachhouse 6/14/2019 #6

对于 PHP,在开始打印 XML 之前输入以下代码行:

while(ob_get_level()) ob_end_clean();
22赞 Chintan Khetiya 3/9/2021 #7

调试 XML 文件。要么有空间,要么添加额外或更少的标签。

为了更好地理解,通过命令行生成项目。窗户:gradlew build

就我而言,AndroidManifest.xml在第一行有一个空格

<Empty Row> // This Creates the issue 
<?xml version="1.0" encoding="utf-8"?>

评论

0赞 kjhughes 3/9/2021
进一步注意,“添加了额外或更少的标记”不会导致主题错误消息,除非这些标记位于 XML 声明之前。最后,你的“要么......”该声明具有误导性,因为它排除了其他可能的错误来源(#2 和 #3 在上面进行了彻底描述)。
0赞 Dan Rayson 7/23/2021 #8

值得检查服务器的文件夹,看看是否有杂散的 pom.xml 挂在周围。

我发现我遇到了其他人用格式错误的 pom.xml 描述的问题,但在我没想到会在服务器上的文件夹中。一个旧的构建被留在不受欢迎的 D 周围:

0赞 buqing 10/27/2021 #9

就我而言,选项卡是麻烦制造者。将选项卡替换为空白应该可以解决问题

评论

1赞 kjhughes 10/27/2021
请注意,在此上下文中,制表符与空格/空格没有什么不同:在 XML 声明之前不允许使用这两个制表符。
6赞 KaranKulshrestha 2/24/2022 #10

只需删除此行:因为这种错误只是因为此行而出现,或者您也可以根据此答案中提到的行检查行的格式。<?xml version="1.0" encoding="utf-8"?>

评论

1赞 kjhughes 1/11/2023
错了不要盲目地删除 XML 声明来尝试消除此错误。了解导致此错误的三种简单可能性,并按照提供的简单而具体的解决方案来纠正实际问题。