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

Java 错误:处理指令目标匹配“;[xX][mM][lL]";不允许,java,xml,xslt,Java,Xml,Xslt,这个错误, 不允许处理指令目标与“[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:tem

这个错误,

不允许处理指令目标与“[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>


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

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

The processing instruction target matching "[xX][mM][lL]" is not allowed.
在XML文件顶部以外的任何位置遇到时

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

要纠正此问题,请检查以下可能性:
  • 声明。

    分辨率:删除空白或任何其他 XML声明之前的可见内容

  • 声明。最常见的情况是这是一种声明

    分辨率: 使用诸如

  • XML内容中存在一个声明。 当XML文件以编程方式组合或 通过剪切和粘贴。只能有一个
    声明 在XML文件中,它只能位于顶部

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

    XML
    中有一条自动生成的版权信息,在
    标记前有一个空行,一旦我删除它,我的构建就成功了


    在我的例子中,配置文件中的路径是错误的:找不到文件(路径是错误的),它出现了以下异常:

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


    我的理由是在一个xml中包含以下两个代码

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

    对于5000个目录中的50000个rdf/xml文件(古腾堡项目目录文件),我也遇到了类似的问题。我用暴动解决了它(在耶拿发行版中)

    目录是cache/epub/NN/NN.rdf(其中NN是一个数字)

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

    riot epub/*/*.rdf --output=turtle > allTurtle.ttl
    
    这可能会产生许多警告,但结果的格式可以加载到jena中(使用fuseki web界面)


    非常简单(至少在本例中是如此)。

    对于PHP,在开始打印XML之前,请先编写以下代码:

    while(ob_get_level()) ob_end_clean();
    

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

    为了更好地理解,请通过命令行构建项目。Windows:
    gradlew构建

    在我的例子中,AndroidManifest.xml在第一行有一个空格

    <Empty Row> // This Creates the issue 
    <?xml version="1.0" encoding="utf-8"?>
    
    //这就产生了问题
    
    这个错误实际上破坏了
    XMLEventReader
    的内存效率,因为当输入的初学者有空格时,该错误就会失败

    无论如何,因为已经编写了使用它的代码,所以我必须将
    InputStream
    Reader
    源代码转换为
    String
    ,然后调用
    trim()
    以创建另一个具有该
    字符串的读取器来创建XML事件读取器

    伪代码:

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

    在我的例子中,我删除了所有不需要代码的空白。对于散乱的XML声明来说,消除散乱的XML声明非常有效,您必须将文件视为文本,而不是XML,因为额外的XML声明会阻止XML被删除。使用文本编辑器或以编程方式打开文件,并将其作为文本进行操作,以在将其视为XML文件之前消除散乱的
    声明。我同情您,因为间歇性问题是出了名的难以调试的问题。但是,在此我只能告诉您,这个错误肯定是确定性的:XML声明多次出现或出现在XML文件顶部以外的任何位置都将是一个错误。祝您好运。如果您的XML消息存储为字符串,您可以尝试在将其传递给SAX解析器之前对字符串执行trim()。出于某种原因,我得到的XML响应在开始时引入了额外的空白,这导致了解析时出现上述Xerces错误。这是一个旧线程,但这可能会帮助某些人:在从浏览器手动复制XML文件并复制粘贴到本地文本文件并保存为XML后,我们得到了相同的错误(所讨论的文件是pom.xml,在gradle上进行构建时收到错误)。我们发现xml文件顶部有一个空行,甚至在标记删除之前,它就开始工作了!此错误不是XSLT特有的;它通常与xml解析有关。不仅检查主XSLT文件,还检查所有包含/导入的XSLT文件(
    。/header.xsl
    )以及正在转换的XML输入文档。根据我的经验,在文件的开头意外添加了一个新的空行。删除该行后效果良好。因此我同意第一条注释。在XML声明之前删除注释或空白可以消除此错误,但对于图像中显示的文档,在XML声明之后没有必要删除注释或空白行。在这个答案前面删除空格是:3:分辨率:搜索<代码>可以确认,有人弄乱了复制和粘贴。在那之前我有空间。在开始之前,我在XML定义之前有空格。删除XSLT SOLV开头的所有空白空间。请进一步注意,“添加额外或更少的标记”不会导致主题错误消息,除非这些标记位于XML声明之前