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

时间:2013-11-10 11:25:34

标签: java xml xslt

每当我运行一个以如下开头的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>

注意:我在第一行之前删除了任何前导空格,但错误仍然存​​在!

11 个答案:

答案 0 :(得分:341)

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

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

当遇到XML declaration 以外的任何地方而不是XML文件的顶部。

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

要解决此问题,请检查以下可能性:

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

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

  2. <?xml ?>之前存在一些 不可见的内容 声明。最常见的是Byte Order Mark (BOM)

    解决: 使用W3C page on the BOM in HTML.

  3. 建议的技术删除BOM
  4. XML内容中存在流浪<?xml ?>声明。 当XML文件以编程方式组合或时,可能会发生这种情况 通过剪切和粘贴。只能有一个<?xml ?>声明 在XML文件中,它只能位于顶部。

    解决方案:搜索 <?xml以不区分大小写的方式,删除除顶级XML之外的所有内容 来自档案的声明。

答案 1 :(得分:10)

对我来说,原因是一个xml中的以下代码中有2个

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

XML中有自动生成的版权信息,<resources>标记前有一个空行,删除后我的版本成功。

enter image description here

答案 4 :(得分:0)

在我的情况下是一个配置文件中的错误路径:找不到文件(路径错误),它出现了这个异常:

  

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

答案 5 :(得分:0)

我在5,000个目录(Project Gutenberg目录文件)中有50,000个rdf / xml文件时遇到了类似的问题。我用riot解决了问题(在jena发行版中)

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

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

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

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

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

答案 6 :(得分:0)

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

while(ob_get_level()) ob_end_clean();

答案 7 :(得分:0)

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

为了更好地理解通过命令行构建项目。视窗:gradlew build

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

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

答案 8 :(得分:0)

这个错误确实破坏了 XMLEventReader 的内存效率,因为当输入的初学者有空格时会失败。

无论如何,因为已经编码使用它,我必须将 InputStreamReader 源转换为 String 然后调用 trim() 以创建另一个读取器String 创建 XML 事件读取器。

伪代码:

Reader reader = new StringReader(
        inputStreamToStringBuilder( getInputStream(), getContentCharset() )
                .toString().trim()
);
XMLEventReader eventReader = inputFactory.createXMLEventReader(reader);

答案 9 :(得分:0)

检查您服务器的文件夹是否有闲散的 pom.xml 是值得的。

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

答案 10 :(得分:-1)

就我而言,我删除了所有空白区域,不需要代码。它奏效了