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

selecting following attribute

Subject: selecting following attribute
From: Terry Ofner <tdofner@xxxxxxxxx>
Date: Fri, 17 Sep 2010 12:02:08 -0400
 selecting following attribute
I am creating a specialized table of contents that will contain page ranges
(pp. 5-12, p. 17). I am starting with a flat structure in which the page
reference for each entry has been changed to a @startNum attribute:

<Book>
<UnitName startNum="2">Unit Name</UnitName>
<chapter startNum="4" number="1">
   <title>Chapter 1: ...</title>
</chapter>
<lesson startNum="5">...</lesson>
<sublesson startNum="5">1.	 ...</sublesson>
<sublesson startNum="7">2.	 ...</sublesson>
<sublesson startNum="8">3.	...</sublesson>
<sublesson startNum="12">4.	 ...</sublesson>
<lesson startNum="13">...</lesson>
<sublesson startNum="13">1.	 ...</sublesson>
<italicFeature singlePage="17">...</italicFeature>
<sublesson startNum="18">2.	 ...</sublesson>
<sublesson startNum="21">3.	 ...</sublesson>
<sublesson startNum="22">4.	 ...</sublesson>
<lesson startNum="24">...</lesson>
<italicFeature singlePage="26">...</italicFeature>
<sublesson startNum="29">5.	 ...</sublesson>
<lesson startNum="33">...</lesson>
<chapter startNum="34" number="2">
   <title>Chapter 2: ...</title>
</chapter>
<!--much more like this-->
</Book>

The desired output would add an endNum attribute to each element:

<chapter startNum="4" number="1" endNum="33">
   <title>Chapter 1: ...</title>
</chapter>
<lesson startNum="5" endNum="12">...</lesson>

Issues:

Each <italicFeature> element is single page entry that must be included in the
sublesson page range.

 <sublesson startNum="13" endNum="17">1.	 ...</sublesson>
<italicFeature singlePage="17">...</italicFeature>
<sublesson startNum="18">2.	 ...</sublesson>

My current strategy for generating the endNum attributes is to subtract 1 from
the following startNum if it satisfies certain conditions. In this template, I
first test to see if the following @startNum is equal to the current
@startNum. If it is, then the @endNum will be the same as the @startNum. If it
isn't, then I need to subtract 1 from the following @startNum.

   <xsl:template match="sublesson">
        <xsl:choose>
            <xsl:when test="following::*/@startNum[1] = @substartNum">
                <xsl:copy>
                    <xsl:copy-of select="@*"/>
                    <xsl:attribute name="endNum">
                        <xsl:value-of select="@startNum"/>
                    </xsl:attribute>
                    <xsl:apply-templates/>
                </xsl:copy>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy>
                    <xsl:copy-of select="@*"/>
                    <xsl:attribute name="endNum">
                        <xsl:value-of select="following::*[1]/@startNum -1"/>
<!--offending line-->
                    </xsl:attribute>
                    <xsl:apply-templates/>
                </xsl:copy>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

All well and good except that the offending line noted above does not seem to
select the first following @startNum. Here is a snippet of my output:

<lesson startNum="13" endNum="23"/>...</lesson>
      <sublesson startNum="13" endNum="">1.	 ...</sublesson>     <!--no
endNum-->
      <italicFeature singlePage="17">C...</italicFeature>
      <sublesson startNum="18" endNum="20">2.	...</sublesson>

My question: How do I select the first following @startNum?

This formulation

<xsl:value-of select="following::*/@startNum[1] -1"/>

returns this error in Oxygen: Saxon B 9.0.0.6: A sequence of more than one
item is not allowed as the first operand of '-'

Of course, my approach to this problem could be the problem. Perhaps there is
a better approach. I have tried grouping the chapters and lessons first, but
the problem noted above still remains.

Terry

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.