【问题标题】: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>

【问题讨论】:

    标签: xml xslt xml-parsing xml-validation


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      一般情况

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

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

      一个根元素示例(GOOD)

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

      此错误的最常见来源是:

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

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

        <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 与您想象的不同(不好):

        在提供给解析之前立即记录 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 提供了一个发现和删除它们的技巧。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多