【问题标题】:The markup declarations contained or pointed to by the document type declaration must be well-formed文档类型声明包含或指向的标记声明必须格式正确
【发布时间】:2013-03-13 08:34:27
【问题描述】:

我已经写了一个 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>

第一行 (&lt;?xml version="1.0" encoding="UTF-8"?&gt;) 抛出错误。

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

【问题讨论】:

  • 您的问题是一个简单的拼写错误:apche.org 更改为apache.org。你没有说什么程序给你那个错误。该错误似乎来自 Xerces,如果引用的 DTD 无效,它确实会引发此错误。在浏览器中键入该 URL,您会看到返回的是一些 HTML,而不是 DTD,因此 Xerces 对此的抱怨是正确的。修正错字,一切就绪。

标签: xml struts2 dtd


【解决方案1】:

我猜这是因为&lt;?xml 之间以及?&gt; 之间的额外空格。

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

编辑

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

  1. 您似乎忘记了 DTD uri 中 apache.org 中的“a”。
  2. http://struts.apache.org/dtds/struts-2.0.dtd 提供的 DTD 以 XML 开头 声明(&lt;?xml version="1.0" encoding="UTF-8"?&gt;),这是在 DTD 的开头(因为 DTD 不是 XML 文件)。

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

【讨论】:

  • 那是因为我无法在堆栈溢出时在这里发布我的 xml
  • 只是为了在这里发布我的问题,我故意给了那个空间,我在问题中也提到了。感谢艾蒂安调查它
  • 哦,好的。我编辑了问题以删除这些空格。您应该以四个空格开始代码块的每一行,以便 StackOverflow 知道它的代码并正确显示它。
  • 非常感谢,非常感谢
【解决方案2】:

当你创建一个 dtd 时,它总是包含行

<!DOCTYPE…. [
...
]>  

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多