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

Posted

技术标签:

【中文标题】如何修复错误:文档中根元素之后的标记必须格式正确【英文标题】:How to fix error: The markup in the document following the root element must be well-formed 【发布时间】:2018-03-03 11:40:23 【问题描述】:

我把我的代码放在 XML 验证网站上,它给了我这个错误:

第 8 行:4 文档中根元素之后的标记必须格式正确。

有问题的行是<xsl:output method = "html" doctype-system = "about:legacy-compat"/>,行。

XML

<?xml version="1.0"?>

<!-- Fig. 15.21: sorting.xsl -->
<xsl:stylesheet version = "1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>

<!-- write XML declaration and DOCTYPE DTD information -->
*<xsl:output method = "html" doctype-system = "about:legacy-compat" />*

 <!-- match document root -->
 <xsl:template match="/"> -<html> <xsl:apply-templates/> </html> 
 </xsl:template>

【问题讨论】:

【参考方案1】:

这也可能是因为此文件中的空格错误

【讨论】:

【参考方案2】:

一般情况

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

此错误表明您的 XML 在根元素之后有标记。 为了成为well-formed,XML must have exactly one root element,并且在单个根元素之后不能有进一步的标记。

一个根元素示例(GOOD)

<r>
  <a/>
  <b/>
  <c/>
</r>

此错误的最常见来源是:

    包括杂散或额外关闭标签 (BAD):

    <r>
      <a/>
      <b/>
      <c/>
    </r>
    </r>  <!-- shouldn't be here -->
    

    故意拥有多个根元素(不好):

    <a/>
    <b/>  <!-- second root element shouldn't be here -->
    <c/>  <!-- third root element shouldn't be here -->
    

    无意中拥有多个根元素 (BAD):

    <r/>  <!-- shouldn't be self-closing -->
      <a/>
      <b/>
      <c/>
    </r>
    

    解析的 XML 与您想象的不同(不好):

    在提供给解析之前立即记录 XML 失败以确保解析器的 XML 看到的与您认为它看到的 XML 相同。常见的 这里的错误包括:

    正在传递给 解析器与您认为的不同。 XML 的缓冲区变脏。确保它已经 在添加 XML 之前清除。 管道中前一阶段的早期程序 在产生的解析之前更改 XML 此错误消息。

您的特殊问题

在您的特定情况下,您的 XML 似乎有多个根元素,因为 xsl:stylesheet 元素过早关闭(上面的情况 #3)。

改变

            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>

            xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

解决您的直接问题,并添加一个结束标记,

</xsl:stylesheet>

如果您的真实文档中尚不存在。

【讨论】:

复制一下,KJH,我把结束标签放在第 18 行左右。感谢您的及时回复。 哈哈,我自欺欺人了。我会接受上述答案。题;我通过 XML Validation 站点运行了整个过程,没有收到任何错误。我将它加载到我的学校网络服务器上,以便在 Chrome 中呈现页面,这样我就可以在本周将其提交给我的家庭作业。 Chome 在第 8 行也给了我一个错误;此页面包含以下错误:第 8 行第 3 列错误:文档末尾的额外内容。文档末尾的额外内容是指该特定行还是整个文档的结尾? @Mereinid:请阅读Well-formed vs Valid XML 并理解格式正确和有效都不意味着 XSLT 的正确性。另见Running XSLT in a Web Browser。除了这个答案和这两个答案之外,如果您仍然遇到问题,您将不得不发布另一个问题。评论并不意味着新问题 - 只是澄清。谢谢。 非常详细的用例,感谢@kjhughes。我可能会加上我的 2 美分,有时你可能有一些格式良好的 looking XML,在解析时给你与 OP 相同的错误。一个可能的原因是 XML 可能包含不可见字符,例如但不限于 ZERO WIDTH SPACE (U+200B) 或 ZERO WIDTH NO BREAK SPACE (U+FEFF)。 This thread 提供了一个发现和删除它们的技巧。

以上是关于如何修复错误:文档中根元素之后的标记必须格式正确的主要内容,如果未能解决你的问题,请参考以下文章

xml中出现“文档中根元素后面的标记必须格式正确” 的错误

解决:xml中出现“文档中根元素后面的标记必须格式正确。”的错误

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

验证 xml 时出现“根元素之前的文档中的标记必须格式正确”错误

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

元素内容必须由格式正确的字符数据或标记组成。