0

我在 Mac OSX 上使用 Apache Tomcat 7.0.42 运行 Cocoon。我不断从撒克逊人那里得到一个非常奇怪的错误。它说我的 XML 中有一个顶级文本节点。首先,我不确定它们是指我的输出 xml 还是我的 xsl xml。其次,我相信两者都没有顶级文本节点。

这是来自堆栈跟踪的错误消息:

net.sf.saxon.trans.XPathException:当指定“standalone”或“doctype-system”时,文档必须格式正确;但此文档包含顶级文本节点 net.sf.saxon.serialize.XMLEmitter.characters(XMLEmitter.java:574) net.sf.saxon.event.ReceivingContentHandler.flush(ReceivingContentHandler.java:543)

<...长堆栈跟踪...>

org.apache.cocoon.servletservice.DispatcherServlet.service(DispatcherServlet.java:106) javax.servlet.http.HttpServlet.service(HttpServlet.java:728) org.apache.cocoon.servlet.multipart.MultipartFilter.doFilter(MultipartFilter.爪哇:131)

这是我的部门列表.xsl,它导入 common.xsl:

<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:import href="common.xsl" />


    <xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" indent="yes" />

    <xsl:template match="/">
        <html lang="en">
            <body>
                <xsl:call-template name="header" />
                <xsl:call-template name="footer" />
            </body>
        </html>
    </xsl:template>

</xsl:stylesheet>

这是我的 common.xsl:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml">

<xsl:template name="header">
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <head>
        <title> 
        <!-- static for now. Can use parameters though. -->
    Harvard University FAS Course Catalog
        </title>
        <xsl:call-template name="css" />
        <xsl:call-template name="js" />
    </head>
</xsl:template>

<xsl:template name="footer">
    <div id="footer">
        <hr />
        <ul>
            <li>Web Development with XML</li>
            <li>Bret Fontecchio</li>
            <li>Fall 2013</li>
        </ul>
    </div>
</xsl:template>

<xsl:template name="css">
    <style type="text/css">
        <!-- CSS Rules -->
    </style>
</xsl:template>

<xsl:template name="js">
    <!-- use this template to add js
    <script type="text/javascript" src="foobar.js"></script>
-->
</xsl:template>

</xsl:stylesheet>
4

1 回答 1

0

我无法重现这个问题,而且我很确定你的解释(把头放在身体里)是无关紧要的。

这是一个序列化错误;这意味着当 doctype-system 或 Standalone 被请求作为序列化选项时,输出必须是格式正确的文档;它不能有任何元素之外的顶级文本。

首先,我认为除非指定序列化参数“standalone”或“doctype-system”之一,否则不会发生错误。这些可能是从调用应用程序而不是从样式表代码中设置的。

其次,我很确定只有在没有打开元素的情况下将文本写入输出文件时才会发生错误。

所以有些事情你没有告诉我们。

于 2013-10-16T08:41:18.977 回答