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

How to fix error: The markup in the document following the root element must be well-formed

提问人:Mereinid 提问时间:9/22/2017 最后编辑:kjhughesMereinid 更新时间:4/26/2022 访问量:191996

问:

我把我的代码放在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>
xml xslt 解析 xml 验证

评论


答:

53赞 kjhughes 9/22/2017 #1

一般情况

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

此错误表示 XML 在根元素后面有标记。 为了格式正确,XML 必须只有一个根元素,并且单个根元素后面不能再有标记。

一个根元素示例 (GOOD)

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

此错误的最常见来源是:

  1. 包括杂散或超近距离标签 (BAD):

    <r>
      <a/>
      <b/>
      <c/>
    </r>
    </r>  <!-- shouldn't be here -->
    
  2. 故意具有多个根元素 (BAD):

    <a/>
    <b/>  <!-- second root element shouldn't be here -->
    <c/>  <!-- third root element shouldn't be here -->
    
  3. 无意中具有多个根元素 (BAD):

    <r/>  <!-- shouldn't be self-closing -->
      <a/>
      <b/>
      <c/>
    </r>
    
  4. 解析与您想象的不同的 XML (BAD):

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

    • 要传递给 解析器与你所认为的不一样。
    • XML 的缓冲区是脏的。确保它已经 在添加 XML 之前清除。
    • 管道中前一阶段的早期程序 在生成的解析之前更改 XML 此错误消息。

您的特殊问题

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

改变

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

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

以解决您的直接问题,并添加结束标签,

</xsl:stylesheet>

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

评论

0赞 Mereinid 9/22/2017
复制一下,KJH,我在大约 18 行上写下了结束标签。感谢您抽出宝贵时间及时回复。
0赞 Mereinid 9/22/2017
呵呵,我把自己搞砸了。我会接受上述答案。问题;我通过XML验证站点运行了整个过程,没有收到任何错误。我把它加载到我的学校网络服务器上,在Chrome中呈现页面,这样我就可以把它交给我本周的家庭作业。Chome 在第 8 行也给了我一个错误;此页面包含以下错误:第 8 行第 3 列的错误:文档末尾的额外内容。文档末尾的额外内容是指该特定行还是整个文档的末尾?
0赞 kjhughes 9/22/2017
@Mereinid:请阅读格式正确的 XML 与有效的 XML,并理解格式正确或有效都不意味着 XSLT 的正确性。另请参阅在 Web 浏览器中运行 XSLT。除了这个答案和这两个答案之外,如果您仍然遇到问题,您将不得不发布另一个问题。评论不是为了新问题,而只是为了澄清。谢谢。
0赞 Attila 10/31/2018
非常详细的用例,谢谢@kjhughes。我可能会添加我的 2 美分,有时您可能会有一些格式良好的 XML,在解析时会给您带来与 OP 相同的错误。一个可能的原因是 XML 可能包含不可见字符,例如但不限于 (U+200B) 或 (U+FEFF)。这个线程提供了一个发现和删除它们的技巧。ZERO WIDTH SPACEZERO WIDTH NO BREAK SPACE
0赞 Sean Anderson 4/5/2022
当打开的 html 标签被复制/粘贴(删除)时,我看到了这个错误。xml 解析器在开始正文标记的行上抛出错误。
-1赞 fady ahmed 5/2/2020 #2

这也可能是由于此文件中的空格错误而显示的

评论

2赞 kjhughes 7/15/2022
由于“此文件中的空格错误”而引起的此错误的一个例子将使您的答案更加有用。就目前而言,这没有帮助。