xsl-list
[Top] [All Lists]

RE: increment value - philosophy

2004-02-09 07:18:39
Hello Ken,

That works beautifully. Once again you are the man. Thanks for helping me
out.

Anoop

-----Original Message-----
From: G. Ken Holman [mailto:gkholman(_at_)CraneSoftwrights(_dot_)com]
Sent: Sunday, February 08, 2004 4:57 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] increment value - philosophy


At 2004-02-08 16:28 -0500, Govil, Anoop (Contractor) wrote:
Thanks for your solution. I tested it in my application. I have a new issue
with this solution, if one of the sub menu items is empty (i.e., the
SubMenuLabel tag is empty), it still counts it and doesn't skip that if it
is empty. I tried various things but still can't skip it. I will really
appreciate if you think of how to fix that issue to skip a submenuitem node
if it is empty.

Rather than think about what you are skipping, try to focus on what you are 
counting: you are counting those SubMenuLabel elements that are not 
empty.  When is an element not empty?  When it has node children.

So, only deal with SubMenuLabel[node()] elements.

Again, the idea when working with the hierarchy is to let XSLT do the heavy 
lifting by describing what it is you want done.

I hope this helps.

....................... Ken

t:\ftemp>type snoop.xml
<?xml version="1.0"?>
<MENU>
      <MenuItems>
          <MenuLabel>Menu 1</MenuLabel>
          <SubMenuItems>
              <SubMenuLabel>Sub Menu 1</SubMenuLabel>
          </SubMenuItems>
          <SubMenuItems>
              <SubMenuLabel></SubMenuLabel>
          </SubMenuItems>
          <SubMenuItems>
              <SubMenuLabel>Sub Menu 11</SubMenuLabel>
          </SubMenuItems>
      </MenuItems>
      <MenuItems>
          <MenuLabel>Menu 2</MenuLabel>
          <SubMenuItems>
              <SubMenuLabel></SubMenuLabel>
          </SubMenuItems>
          <SubMenuItems>
              <SubMenuLabel>Sub Menu 2</SubMenuLabel>
          </SubMenuItems>
      </MenuItems>
</MENU>

t:\ftemp>type snoop.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                  version="1.0">

<xsl:output method="text"/>

<xsl:template match="/">
    <xsl:text>Method 1: using the count function:
</xsl:text>
    <xsl:for-each select="//MenuLabel | //SubMenuLabel[node()]">
      <xsl:value-of select="1 + count(preceding::MenuLabel) +
                            count(preceding::SubMenuLabel[node()])"/>
      <xsl:value-of select="concat(' ',.)"/><xsl:text>
</xsl:text>
    </xsl:for-each>
    <xsl:text>Method 2: using xsl:number:
</xsl:text>
    <xsl:for-each select="//MenuLabel | //SubMenuLabel[node()]">
      <xsl:number level="any" count="MenuLabel | SubMenuLabel[node()]"/>
      <xsl:value-of select="concat(' ',.)"/><xsl:text>
</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>


t:\ftemp>saxon snoop.xml snoop.xsl
Method 1: using the count function:
1 Menu 1
2 Sub Menu 1
3 Sub Menu 11
4 Menu 2
5 Sub Menu 2
Method 2: using xsl:number:
1 Menu 1
2 Sub Menu 1
3 Sub Menu 11
4 Menu 2
5 Sub Menu 2

t:\ftemp>


--
Public courses: upcoming world tour of hands-on XSL training events
Each week:    Monday-Wednesday: XSLT/XPath; Thursday-Friday: XSL-FO
Washington, DC: 2004-03-15            San Francisco, CA: 2004-03-22
Hong Kong: 2004-05-17    Germany: 2004-05-24    England: 2004-06-07
World-wide on-site corporate, government & user group XML training!

G. Ken Holman                  mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd.           http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0     +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness   http://www.CraneSoftwrights.com/s/bc


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list