Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > formatting text with XSLT

Reply
Thread Tools

formatting text with XSLT

 
 
Steven
Guest
Posts: n/a
 
      04-01-2005
I have song lyrics typed out in my XML file in paragraphcs (verse,
chorus, verse, etc) but when I load them with my XSLT stylesheet, the
paragraphs are lost and all the words are jumbled together. I've tried
everything I could find in Microsoft's SDK help file, but nothing
worked. any ideas?

 
Reply With Quote
 
 
 
 
Richard Light
Guest
Posts: n/a
 
      04-01-2005
In message <(E-Mail Removed) .com>,
Steven <(E-Mail Removed)> writes
>I have song lyrics typed out in my XML file in paragraphcs (verse,
>chorus, verse, etc) but when I load them with my XSLT stylesheet, the
>paragraphs are lost and all the words are jumbled together. I've tried
>everything I could find in Microsoft's SDK help file, but nothing
>worked. any ideas?


Are you willing to share examples of your XML, and your XSLT stylesheet,
with the group? We might then be able to help.

--
Richard Light
SGML/XML and Museum Information Consultancy
http://www.velocityreviews.com/forums/(E-Mail Removed)

 
Reply With Quote
 
 
 
 
Steven
Guest
Posts: n/a
 
      04-01-2005
-------------------XML File-----------------------

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="/BBN/songs.xsl"?>

<data>
<artist>Hoobastank</artist>
<album>The Reason</album>
<release>2004</release>
<song title="The Reason" track="08">
I'm not a perfect person
As many things I wish I didn't do
But I continue learning
I never meant to do those things to you
And so I have to say before I go
That I just want you to know

I've found a reason for me
To change who I used to be
A reason to start over new
And the reason is you
</song>
</data>

^^^^^^^^^^^^^^^^^^^^^^^^^^XML File^^^^^^^^^^^^^^^^^^

----------------------XSL File----------------

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="data">
<html>
<head>
<title>
<xsl:value-of select="artist"/> -
<xsl:value-of select="album"/>
</title>
</head>
<body bgcolor="#FFFFCC">
<table border="0" width="835" cellspacing="3"
cellpadding="2">
<tr>
<td align="center">
<font size="5"><i>
<xsl:value-of
select="artist"/> - <xsl:value-of select="album"/>
</i></font>
</td>
</tr>
<xsl:for-each select="song">
<xsl:sort select="./@track"/>
<tr>
<td>

<xsl:apply-templates select="."/>
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

<xsl:template match="song">
<font size="4"><b>
<xsl:value-of select="@title"/>
</b></font>
<br/>
<xsl:value-of select="."/>
<p/>
</xsl:template>

</xsl:stylesheet>
^^^^^^^^^^^^^^^^^^^^^^^^XSL File^^^^^^^^^^^^^^^^^^^^^^^

 
Reply With Quote
 
Richard Light
Guest
Posts: n/a
 
      04-01-2005

The specific problem is that this code:

<xsl:value-of select="."/>
<p/>

outputs the text of your <song> element, followed by an empty paragraph.
If you want the text _inside_ the paragraph, do:

<p>
<xsl:value-of select="."/>
</p>

However, this won't get you a lot further: the basic markup of each song
is a bit on the light side. If you had e.g.:

<verse>
<l>I'm not a perfect person</l>
<l>As many things I wish I didn't do</l>
....
</verse>
<verse>
<l>I've found a reason for me</l>
....

it would be possible to make much better use of the information, and
specifically it would make it easy to format it nicely using XSLT.

Richard

In message <(E-Mail Removed) .com>,
Steven <(E-Mail Removed)> writes
>-------------------XML File-----------------------
>
><?xml version="1.0"?>
><?xml-stylesheet type="text/xsl" href="/BBN/songs.xsl"?>
>
><data>
> <artist>Hoobastank</artist>
> <album>The Reason</album>
> <release>2004</release>
> <song title="The Reason" track="08">
> I'm not a perfect person
> As many things I wish I didn't do
> But I continue learning
> I never meant to do those things to you
> And so I have to say before I go
> That I just want you to know
>
> I've found a reason for me
> To change who I used to be
> A reason to start over new
> And the reason is you
> </song>
></data>
>
>^^^^^^^^^^^^^^^^^^^^^^^^^^XML File^^^^^^^^^^^^^^^^^^
>
>----------------------XSL File----------------
>
><?xml version="1.0"?>
><xsl:stylesheet version="1.0"
>xmlnssl="http://www.w3.org/1999/XSL/Transform">
><xsl:template match="data">
> <html>
> <head>
> <title>
> <xsl:value-of select="artist"/> -
><xsl:value-of select="album"/>
> </title>
> </head>
> <body bgcolor="#FFFFCC">
> <table border="0" width="835" cellspacing="3"
>cellpadding="2">
> <tr>
> <td align="center">
> <font size="5"><i>
> <xsl:value-of
>select="artist"/> - <xsl:value-of select="album"/>
> </i></font>
> </td>
> </tr>
> <xsl:for-each select="song">
> <xsl:sort select="./@track"/>
> <tr>
> <td>
>
><xsl:apply-templates select="."/>
> </td>
> </tr>
> </xsl:for-each>
> </table>
> </body>
> </html>
></xsl:template>
>
><xsl:template match="song">
> <font size="4"><b>
> <xsl:value-of select="@title"/>
> </b></font>
> <br/>
> <xsl:value-of select="."/>
> <p/>
></xsl:template>
>
></xsl:stylesheet>
>^^^^^^^^^^^^^^^^^^^^^^^^XSL File^^^^^^^^^^^^^^^^^^^^^^^
>


--
Richard Light
SGML/XML and Museum Information Consultancy
(E-Mail Removed)

 
Reply With Quote
 
Steven
Guest
Posts: n/a
 
      04-01-2005
so there's no way to just have it displayed/copied exactly the way it's
typed in the XML?

 
Reply With Quote
 
Richard Light
Guest
Posts: n/a
 
      04-01-2005
In message <(E-Mail Removed) .com>,
Steven <(E-Mail Removed)> writes
>so there's no way to just have it displayed/copied exactly the way it's
>typed in the XML?


Remember you are outputting this to HTML, so you are stuck with what a
browser will do to your output. If there isn't, as a minimum, a <br/>
tag at the end of each line, it will simply render your lyrics as one
big paragraph.

It _is_ possible to write XSLT to convert newlines in your source to
<br/> tags in your output (there was a thread about this a day or two
back over in microsoft.public.xsl), but marking up the source sensibly
in the first place is (in my view) a much cleaner way of going about the
job.

Richard
--
Richard Light
SGML/XML and Museum Information Consultancy
(E-Mail Removed)

 
Reply With Quote
 
Martin Honnen
Guest
Posts: n/a
 
      04-01-2005


Steven wrote:

> so there's no way to just have it displayed/copied exactly the way it's
> typed in the XML?


If you are transforming to HTML you can use the <pre> element e.g.

<xsl:template match="song">
<h2><xsl:value-of select="@title" /></h2>
<pre><xsl:value-of select="." /></pre>
</xsl:template>

--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
Steven
Guest
Posts: n/a
 
      04-01-2005
hey, the <pre> tag did it! Thanks Martin and Richard. That's what I
needed, because I didn't want the lyrics marked up any more than they
were.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Formatting XML with an XSLT without access to the XML cp XML 2 08-20-2007 06:50 PM
XSLT xml to xml simple question about formatting kbozek@yahoo.com XML 1 06-07-2007 10:48 PM
XSLT Select nodes without text-node children whose names starts with specifix text Michael Reiche XML 3 02-05-2004 10:40 PM
Need formatting options menu for formatting hard drive Mark T. Computer Support 3 11-24-2003 11:50 PM
conditional formatting in XSLT kevin bailey XML 0 08-13-2003 02:42 PM



Advertisments