【问题标题】:Why do I get a "Premature End of File" error when performing my XSLT transform?为什么在执行 XSLT 转换时出现“文件过早结束”错误?
【发布时间】:2011-08-03 18:40:34
【问题描述】:

获取线#-1; #-1 列; xslt 转换时文件过早结束错误

XSL:

<xsl:template match="/">
    <html>
        <head>
            <title>Real's HowTo</title>
        </head>
        <body>
            <table border="1">
                <tr>
                    <th>Titleamit</th>
                    <th>Link</th>
                </tr>
                <xsl:for-each select="mx:feed/mx:entry">
                    <tr>
                        <td>
                            <xsl:value-of select="mx:title" />
                        </td>
                        <td>
                            <xsl:value-of select="mx:published" />
                        </td>
                    </tr>
                </xsl:for-each>
            </table>
        </body>
    </html>
</xsl:template>

XML:

<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:clearspace="http://www.jivesoftware.com/xmlns/clearspace/rss"
xmlns:dc="http://purl.org/dc/elements/1.1/">
    <title>
        Sprint Community: Space Polls - Android
    </title>
    <link rel="alternate" href="http://community.sprint.com/baw/poll.jspa?containerType=14&container=2130" />
    <subtitle>
        List of polls
    </subtitle>
    <id>
        http://community.sprint.com/baw/poll.jspa?containerType=14&container=2130
    </id>
    <generator uri="http://jivesoftware.com/products/clearspace/" version="4.5.4.1">
        Jive SBS
    </generator>
    <updated>
        2010-02-08T17:30:00Z
    </updated>
    <dc:date>
        2010-02-08T17:30:00Z
    </dc:date>
    <dc:language>
        en
    </dc:language>
    <entry>
        <title>
            What's Valuable
        </title>
        <link rel="alternate" href="http://community.sprint.com/baw/poll.jspa?poll=1062" />
        <author>
            <name>
                wengla02
            </name>
            <uri>
                /people/wengla02
            </uri>
            <email>
                noreply-buzz@sprint.com
            </email>
        </author>
        <updated>
            2010-02-08T17:30:00Z
        </updated>
        <published>
            2010-02-08T17:30:00Z
        </published>
        <summary type="html" />
        <dc:date>
            2010-02-08T17:30:00Z
        </dc:date>
        <clearspace:dateToText>
            1 year, 2 months ago
        </clearspace:dateToText>
        <clearspace:objectType>
            0
        </clearspace:objectType>
    </entry>
</feed>

Java 代码:

// load xslt fromxsltFilePath
url = getClass().getClassLoader().getResource("com/sprint/mysprint/phoneMedia/myPhoneAndMedia/xsl/announcementFeed.xsl");

BufferedInputStream bis3= new BufferedInputStream(url.openStream());

if (isLoggingDebug()) {
    BufferedInputStream bis1= new BufferedInputStream(url.openStream());
    byte[] buffer1 = new byte[1024];
    int bytesRead1 = 0;

    while ((bytesRead1 = bis1.read(buffer1)) != -1) {
        String chunk1 = new String(buffer1, 0, bytesRead1);
        logDebug(" " + chunk1);
    }
}

TransformerFactory transformerFactory = TransformerFactory.newInstance();

// create xslt Template
Templates template = transformerFactory.newTemplates(
  new StreamSource(new DataInputStream(url.openStream())));

// Create Transformer 
Transformer transformer = template.newTransformer();
transformer.transform(
  new StreamSource(bis), new StreamResult(xhtmlContent));

【问题讨论】:

  • 也许您只是没有将它包含在帖子中,但是我错过了 XML 标题(´´)和一个´ ´ 根节点。
  • 在这种情况下,应该在创建Templates 对象或Transformer 时发生异常。它是追溯到这些行之一,还是在transform() 调用中发生异常?

标签: java xml parsing-error


【解决方案1】:

&amp;amp; & 符号在您的 xml 中未转义。您应该将它们更改为 &amp;amp; 以便能够解析 xml 数据,否则它将无法工作。 在解析和转换、包装等之后,您可以通过更改这些字符来更新结果。

【讨论】:

  • 好发现! XML 中没有;,所以我猜解析器会继续阅读,假设它正在获取字符引用。在文件的末尾,它仍在继续。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2011-09-11
  • 2020-06-13
  • 2010-10-17
  • 2018-04-08
  • 1970-01-01
相关资源
最近更新 更多