Why do I get a "Premature End of File" error when performing my XSLT transform?

Amit picture Amit · Apr 12, 2011 · Viewed 47.1k times · Source

Getting Line #-1; Column #-1; Premature end of file Error while xslt transform

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>
                [email protected]
            </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 code:

// 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));

Answer

rekaszeru picture rekaszeru · Apr 12, 2011

The & ampersand signs are not escaped in your xml. You should change them to &amp; in order to be able to parse the xml data, otherwise it won't work. After parsing and transforming, wrapping, whatever, you can update the results by changing these characters back.