formatting text with XSLT

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Steven

    formatting text with XSLT

    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?

  • Richard Light

    #2
    Re: formatting text with XSLT

    In message <1112327016.704 969.230160@f14g 2000cwb.googleg roups.com>,
    Steven <steven.beckham @gmail.com> writes[color=blue]
    >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?[/color]

    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
    richard@light.d emon.co.uk

    Comment

    • Steven

      #3
      Re: formatting text with XSLT

      -------------------XML File-----------------------

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

      <data>
      <artist>Hoobast ank</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:styleshe et version="1.0"
      xmlns:xsl="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="#FFFFC C">
      <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^^^^^^^^^^^ ^^^^^^^^^^^^

      Comment

      • Richard Light

        #4
        Re: formatting text with XSLT


        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 <1112341386.324 916.126000@o13g 2000cwo.googleg roups.com>,
        Steven <steven.beckham @gmail.com> writes[color=blue]
        >-------------------XML File-----------------------
        >
        ><?xml version="1.0"?>
        ><?xml-stylesheet type="text/xsl" href="/BBN/songs.xsl"?>
        >
        ><data>
        > <artist>Hoobast ank</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:styleshee t version="1.0"
        >xmlns:xsl="htt p://www.w3.org/1999/XSL/Transform">
        ><xsl:templat e match="data">
        > <html>
        > <head>
        > <title>
        > <xsl:value-of select="artist"/> -
        ><xsl:value-of select="album"/>
        > </title>
        > </head>
        > <body bgcolor="#FFFFC C">
        > <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:templat e 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^^^^^^^^^^^ ^^^^^^^^^^^^
        >[/color]

        --
        Richard Light
        SGML/XML and Museum Information Consultancy
        richard@light.d emon.co.uk

        Comment

        • Steven

          #5
          Re: formatting text with XSLT

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

          Comment

          • Richard Light

            #6
            Re: formatting text with XSLT

            In message <1112372096.998 115.110320@f14g 2000cwb.googleg roups.com>,
            Steven <steven.beckham @gmail.com> writes[color=blue]
            >so there's no way to just have it displayed/copied exactly the way it's
            >typed in the XML?[/color]

            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.publi c.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
            richard@light.d emon.co.uk

            Comment

            • Martin Honnen

              #7
              Re: formatting text with XSLT



              Steven wrote:
              [color=blue]
              > so there's no way to just have it displayed/copied exactly the way it's
              > typed in the XML?[/color]

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

              <xsl:template match="song">
              <h2><xsl:valu e-of select="@title" /></h2>
              <pre><xsl:val ue-of select="." /></pre>
              </xsl:template>

              --

              Martin Honnen

              Comment

              • Steven

                #8
                Re: formatting text with XSLT

                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.

                Comment

                Working...