文档类型声明包含或指向的标记声明必须格式正确

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文档类型声明包含或指向的标记声明必须格式正确相关的知识,希望对你有一定的参考价值。

我写了一个XML,但是在第一行的XML中我得到了一个错误

文档类型声明包含或指向的标记声明必须格式正确

下面是XML(尖括号后的空格是故意的)

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

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apche.org/dtds/struts-2.0.dtd">  
<struts>

    <package name="default" extends="struts-default">       
        <action name="getTutorial" class="org.koushik.javabrains.action.TutorialAction">                
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

    </package>

</struts>

第一行(<?xml version="1.0" encoding="UTF-8"?>)抛出错误。

请告诉我为什么我会遇到这个问题。

答案

我想这是因为<?xml之间以及?>之间的额外空间。

请注意,您似乎在doctype声明的开头和结尾都有额外的空格。

编辑

好的,我发现你的文件还有两个问题:

  1. 你似乎忘记了DTD uri中apache.org中的“a”。
  2. http://struts.apache.org/dtds/struts-2.0.dtd上提供的DTD以XML声明(<?xml version="1.0" encoding="UTF-8"?>)开头,在DTD开始时被禁止(因为DTD不是XML文件)。

如果第一个错误导致问题,那么很容易修复。但是,第二个错误是在struts开发者方面。我想大多数XML解析器都会忽略它(否则struts团队很久以前就会修复它),但是如果你有一个XML解析会抱怨它,我恐怕你唯一的选择就是切换到另一个。

另一答案

创建dtd时,它始终包含行

<!DOCTYPE…. [
...
]>  

只需删除声明DTD数据的第一行和最后一行,因为只有在XML文件中包含DTD时才会使用这些数据。

以上是关于文档类型声明包含或指向的标记声明必须格式正确的主要内容,如果未能解决你的问题,请参考以下文章

文档中根元素之前的标记必须格式正确

PHP/SOAP/XML 文档中根元素之前的标记必须格式正确

DTD DOCTYPE

XML基础

如何修复错误:文档中根元素之后的标记必须格式正确

Java中自定义类和基本类型声明的数组,在对内存中存储的内容、方式和内存地址指向方面有啥区别?