[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: more nesting node questions

Subject: Re: more nesting node questions
From: JBryant@xxxxxxxxx
Date: Thu, 26 May 2005 15:30:20 -0500
xsl if nesting
Hi, Andy,

I don't fiddle with text output much (I mostly work on the opposite end of 
the spectrum: XSL:FO), but I was able to get a decent text output of your 
sample. It has more line breaks than your desired result, but white space 
is good, right? :D

Here's the XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>

<xsl:template match="install">
<xsl:apply-templates/>
</xsl:template>
 
<xsl:template match="step">
<xsl:text>
</xsl:text>
<xsl:number format="1. "/><xsl:value-of select="command"/><xsl:text>
</xsl:text><xsl:apply-templates select="para|note"/>
</xsl:template>

<xsl:template match="command"/>

<xsl:template match="para">
<xsl:text>
   </xsl:text><xsl:value-of select="."/>
<xsl:if test="position() = last()"><xsl:text>
</xsl:text></xsl:if>
</xsl:template>

<xsl:template match="note">
<xsl:text>
   </xsl:text>Note: <xsl:value-of select="."/>
<xsl:if test="position() = last()"><xsl:text>
</xsl:text></xsl:if>
</xsl:template>

</xsl:stylesheet>

And the result:

 
1. This is the command for the first step.

 
2. This is the command for the second step.

 
3. This is the command for the third step.

   This is the first para in step three.
   This is the second para in step three.
   Note: This is the first note in step three.
   Note: This is the second note in step three.
   Note: This is the third note in step three.
   This is the third para in step three.
   This is the fourth para in step three.

 
4. This is the command for the final step.

   Note: This is the only note in step four.

Maybe you can find a happy medium between yours and mine and get what you 
want.

Jay Bryant
Bryant Communication Services
(presently consulting at Synergistic Solution Technologies)





Andy <achall@xxxxxxxxx> 
05/26/2005 02:47 PM
Please respond to
xsl-list@xxxxxxxxxxxxxxxxxxxxxx


To
xsl-list@xxxxxxxxxxxxxxxxxxxxxx
cc

Subject
 more nesting node questions






Hello,

I have been trying to figure out a problem for a couple of days now.

Here's the situation:
I have a list of steps. A step contains one command element followed
by one or more notes and/or para elements.

My XSL can get the info from the elements and the retain the order of
the elements just fine. What I have not managed to do is lay them out
on separate lines.

I am trying to render the data as plain text. I am using Saxon 6.5.3
and XSLT 1.0.

This is what I don't want and is the kind of thing I am getting now:

Installation Notes:
1. This is the command for the first step.
2. This is the command for the second step.
3. This is the command for the third step.This is the first para in
step three.This is the second para in step three.This is the first
note in step three.This is the second note in step three.This is the
third note in step three.This is the third para in step three.This is
the fourth para in step three.
4. This is the command for the final step.This is the only note in step 
four.

This is what I want:

Installation Notes:
1. This is the command for the first step.
2. This is the command for the second step.
3. This is the command for the third step.
This is the first para in step three.
This is the second para in step three.
This is the first note in step three.
This is the second note in step three.
This is the third note in step three.
This is the third para in step three.
This is the fourth para in step three.
4. This is the command for the final step.
This is the only note in step four.

How do I render my XML source the way I want it? I have included my
XML source and XSL sheet below. Can someone set me straight?

Here's my XML source:
<?xml version="1.0" encoding="UTF-8"?>
<install>
                 <step>
                                 <command>This is the command for the 
first step.</command>
                 </step>
                 <step>
                                 <command>This is the command for the 
second step.</command>
                 </step>
                 <step>
                                 <command>This is the command for the 
third step.</command>
                                 <para>This is the first para in step 
three.</para>
                                 <para>This is the second para in step 
three.</para>
                                 <note>This is the first note in step 
three.</note>
                                 <note>This is the second note in step 
three.</note>
                                 <note>This is the third note in step 
three.</note>
                                 <para>This is the third para in step 
three.</para>
                                 <para>This is the fourth para in step 
three.</para>
                 </step>
                 <step>
                                 <command>This is the command for the 
final step.</command>
                                 <note>This is the only note in step 
four.</note>
                 </step>
</install>

Here's my dysfunctional XSL:
<?startSampleFile?>
<!DOCTYPE stylesheet [
                 <!ENTITY space "<xsl:text> </xsl:text>">
                 <!ENTITY cr "<xsl:text>
</xsl:text>">
]>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
                 <xsl:output method="text" omit-xml-declaration="yes" 
indent="no"/>

<xsl:strip-space elements="*"/> 
<xsl:preserve-space elements="command para note"/>
 
  <xsl:variable name="newline">
<xsl:text>
</xsl:text>
  </xsl:variable>

                 <xsl:template match="install">
<xsl:text>Installation Notes:</xsl:text>&cr;
                                 <xsl:for-each select="step">  
                                                 <xsl:sort select="step"/>
 <xsl:number value="position()" format="1. "/> 
  <xsl:choose>
                 <xsl:when test="command">
                                 <xsl:value-of select="."/>
                                 <xsl:value-of select="$newline"/>
                 </xsl:when>
                 <xsl:when test="note">
                                 <xsl:apply-templates select="note"/>
                                 <xsl:value-of select="$newline"/>         
 
                 </xsl:when>   
                 <xsl:when test="para">
                                 <xsl:apply-templates select="para"/>
                                 <xsl:value-of select="$newline"/>         
 
                 </xsl:when>
  </xsl:choose>
                                                 </xsl:for-each>

</xsl:template>


 
                 <?endSampleFile?>
</xsl:stylesheet>


I have also tried using this bit of code to get the contents of each
step node, but I think it is pretty ham-fisted.
<xsl:for-each select="step">
                                                                 <xsl:sort 
select="step"/>
 <xsl:number value="position()" format="1. "/>
                                                 <xsl:apply-templates 
select="node()"/>
                 </xsl:for-each>

Thanks in advance,
Andy Hall

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.