Subject: RE: XSLT HTML Formatted output
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 10 Oct 2007 14:10:16 +0100
|
I don't know PHP but your script gives the impression that the stylesheet is
writing the result tree to a tree in memory, not serializing it to a stream.
The serialization of the tree is being done later, presumably by some PHP
code that is quite unaware of what the stylesheet said in its xsl:output.
xsl:output properties only take effect when the XSLT processor performs the
serialization.
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: adam@xxxxxxxxxxxxxxxxx [mailto:adam@xxxxxxxxxxxxxxxxx]
> Sent: 10 October 2007 09:43
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: XSLT HTML Formatted output
>
> Can anyone tell me why I cant get the output from my XSLT
> test to output with the HTML indented?
>
> I have tried the indent option but the html still comes out
> with all the intents stripped out.
>
> I am a complete newbe with all of this, I am trying to make
> the swich from Smarty template engine to XSLT.
>
> Here is what i am doing.
>
> Firstly I have a php script that pulls the XML file and XSL
> files together:
> ---
> <?php
>
> $xsl_filename = "styles.xsl";
> $xml_filename = "data.xml";
>
> $doc = new DOMDocument();
> $xsl = new XSLTProcessor();
>
> $doc->load($xsl_filename);
> $xsl->importStyleSheet($doc);
>
> $doc->load($xml_filename);
> echo $xsl->transformToXML($doc);
>
> ?>
> ---
>
> This is my XML test data:
> ---
> <?xml version="1.0" encoding="ISO-8859-1"?> <root>
> <title>Welcome to this site</title>
> <catalog>
> <cd>
> <id>1</id>
> <title>Empire Burlesque</title>
> <artist>Bob Dylan</artist>
> <country>USA</country>
> <company>Columbia</company>
> <price>10.9000</price>
> <year>1985</year>
> </cd>
> <cd>
> <id>2</id>
> <title>Hide your heart</title>
> <artist>Bonnie Tyler</artist>
> <country>UK</country>
> <company>CBS Records</company>
> <price>9.9000</price>
> <year>1988</year>
> </cd>
> <cd>
> <id>3</id>
> <title>Greatest Hits</title>
> <artist>Dolly Parton</artist>
> <country>USA</country>
> <company>RCA</company>
> <price>9.9000</price>
> <year>1982</year>
> </cd>
> <cd>
> <id>4</id>
> <title>Still got the blues</title>
> <artist>Gary Moore</artist>
> <country>UK</country>
> <company>Virgin records</company>
> <price>10.2000</price>
> <year>1990</year>
> </cd>
> <cd>
> <id>5</id>
> <title>Eros</title>
> <artist>Eros Ramazzotti</artist>
> <country>EU</country>
> <company>BMG</company>
> <price>9.9000</price>
> <year>1997</year>
> </cd>
> <cd>
> <id>6</id>
> <title>One night only</title>
> <artist>Bee Gees</artist>
> <country>UK</country>
> <company>Polydor</company>
> <price>10.9000</price>
> <year>1998</year>
> </cd>
> <cd>
> <id>7</id>
> <title>Sylvias Mother</title>
> <artist>Dr.Hook</artist>
> <country>UK</country>
> <company>CBS</company>
> <price>8.1000</price>
> <year>1973</year>
> </cd>
> <cd>
> <id>8</id>
> <title>Maggie May</title>
> <artist>Rod Stewart</artist>
> <country>UK</country>
> <company>Pickwick</company>
> <price>8.5000</price>
> <year>1990</year>
> </cd>
> <cd>
> <id>9</id>
> <title>Romanza</title>
> <artist>Andrea Bocelli</artist>
> <country>EU</country>
> <company>Polydor</company>
> <price>10.8000</price>
> <year>1996</year>
> </cd>
> <cd>
> <id>10</id>
> <title>When a man loves a woman</title>
> <artist>Percy Sledge</artist>
> <country>USA</country>
> <company>Atlantic</company>
> <price>8.7000</price>
> <year>1987</year>
> </cd>
> <cd>
> <id>11</id>
> <title>Black angel</title>
> <artist>Savage Rose</artist>
> <country>EU</country>
> <company>Mega</company>
> <price>10.9000</price>
> <year>1995</year>
> </cd>
> <cd>
> <id>12</id>
> <title>1999 Grammy Nominees</title>
> <artist>Many</artist>
> <country>USA</country>
> <company>Grammy</company>
> <price>10.2000</price>
> <year>1999</year>
> </cd>
> <cd>
> <id>13</id>
> <title>For the good times</title>
> <artist>Kenny Rogers</artist>
> <country>UK</country>
> <company>Mucik Master</company>
> <price>8.7000</price>
> <year>1995</year>
> </cd>
> <cd>
> <id>14</id>
> <title>Big Willie style</title>
> <artist>Will Smith</artist>
> <country>USA</country>
> <company>Columbia</company>
> <price>9.9000</price>
> <year>1997</year>
> </cd>
> <cd>
> <id>15</id>
> <title>Tupelo Honey</title>
> <artist>Van Morrison</artist>
> <country>UK</country>
> <company>Polydor</company>
> <price>8.2000</price>
> <year>1971</year>
> </cd>
> <cd>
> <id>16</id>
> <title>Soulsville</title>
> <artist>Jorn Hoel</artist>
> <country>Norway</country>
> <company>WEA</company>
> <price>7.9000</price>
> <year>1996</year>
> </cd>
> </catalog>
> </root>
> ---
>
> This is my XSL data:
> ---
> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet
> version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
>
> <xsl:output indent="yes"/>
>
> <xsl:template match="/root">
> <html>
> <head>
> <title><xsl:apply-templates
> select="title"/></title>
> </head>
> <body>
> <h2>My CD Collection</h2>
> <table border="1">
> <tr bgcolor="#9acd32">
> <th>Title</th>
> <th>Artist</th>
> </tr>
> <xsl:for-each select="catalog/cd">
> <xsl:sort select="price" />
> <tr>
> <td><xsl:value-of
> select="title"
> /></td>
> <xsl:choose>
> <xsl:when test="price > 10">
> <td
> bgcolor="#ff00ff"><xsl:value-of select="artist"/></td>
> </xsl:when>
> <xsl:when test="price > 9">
> <td
> bgcolor="#cccccc"><xsl:value-of select="artist"/></td>
> </xsl:when>
> <xsl:otherwise>
> <td><xsl:value-of
> select="artist"/></td>
> </xsl:otherwise>
> </xsl:choose>
> </tr>
> </xsl:for-each>
> </table>
> </body>
> </html>
> </xsl:template>
>
> <xsl:template match="title">:: <xsl:value-of select="."/>
> ::</xsl:template>
>
> </xsl:stylesheet>
> ---
>
> And this is the source of the result (not indented??):
> ---
> <html>
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
> <title>:: Welcome to this site ::</title> </head> <body>
> <h2>My CD Collection</h2> <table border="1"> <tr
> bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <tr>
> <td>Still got the blues</td> <td bgcolor="#ff00ff">Gary
> Moore</td> </tr> <tr>
> <td>1999 Grammy Nominees</td>
> <td bgcolor="#ff00ff">Many</td>
> </tr>
> <tr>
> <td>Romanza</td>
> <td bgcolor="#ff00ff">Andrea Bocelli</td> </tr> <tr>
> <td>Empire Burlesque</td> <td bgcolor="#ff00ff">Bob
> Dylan</td> </tr> <tr> <td>One night only</td> <td
> bgcolor="#ff00ff">Bee Gees</td> </tr> <tr> <td>Black
> angel</td> <td bgcolor="#ff00ff">Savage Rose</td> </tr> <tr>
> <td>Soulsville</td> <td>Jorn Hoel</td> </tr> <tr> <td>Sylvias
> Mother</td> <td>Dr.Hook</td> </tr> <tr> <td>Tupelo Honey</td>
> <td>Van Morrison</td> </tr> <tr> <td>Maggie May</td> <td>Rod
> Stewart</td> </tr> <tr> <td>When a man loves a woman</td>
> <td>Percy Sledge</td> </tr> <tr> <td>For the good times</td>
> <td>Kenny Rogers</td> </tr> <tr> <td>Hide your heart</td> <td
> bgcolor="#cccccc">Bonnie Tyler</td> </tr> <tr> <td>Greatest
> Hits</td> <td bgcolor="#cccccc">Dolly Parton</td> </tr> <tr>
> <td>Eros</td> <td bgcolor="#cccccc">Eros Ramazzotti</td>
> </tr> <tr> <td>Big Willie style</td> <td
> bgcolor="#cccccc">Will Smith</td> </tr> </table> </body> </html>
> ---
>
> Can anyone see if i am doing something wrong?
>
> Cheers,
> Adam
|