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

Re: Node list operations

Subject: Re: Node list operations
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Sun, 09 May 1999 21:17:55 -0400
xsl first of list
At 99/05/09 15:23 +0700, James Clark wrote:
>You can do it (albeit inefficiently) like this:

Thank you James ... I hadn't considered walking over the entire list each
time and only looking at a single entry of the list when doing so.  I think
your approach exemplifies an approach to a class of problems that people
will come across in their work.

I've taken the time to add some comments to your code to illustrate for
others how your solution works:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0">

                    <!--show 'x' only when first in group of all 'x's-->
<xsl:template match="v">
  <xsl:text>X Y Z
</xsl:text>
  <xsl:for-each select="w">        <!--walk the items in sorted order-->
    <xsl:sort select="x"/>       <!--context node list becomes sorted-->
    <xsl:sort select="y"/>
    <xsl:choose>
      <xsl:when test="position()=1">
        <xsl:value-of select="x"/><!--first in list is first in group-->
      </xsl:when>
      <xsl:otherwise>              <!--get value for current position-->
        <xsl:variable name="pos" expr="position()"/>
        <xsl:variable name="x" expr="x"/>
        <xsl:for-each select="../w">       <!--re-walk the list again-->
                 <!--(causing us to go over the 'n' items in the list
                          a total of n times; hence the inefficiency)-->
          <xsl:sort select="x"/>     <!--must do it in the same order-->
          <xsl:sort select="y"/>
             <!--stop at the position in list before current position;
                 skipping processing for every other position in list-->
          <xsl:if test="position() = $pos - 1">
             <xsl:choose>         <!--examine position before current-->
               <xsl:when test="not(x=$x)">  <!--not same, so is first-->
                 <xsl:value-of select="$x"/>           <!--show value-->
               </xsl:when>
               <xsl:otherwise>  <!--is same, so is not first in group-->
                 <xsl:text> </xsl:text>
               </xsl:otherwise>
             </xsl:choose>
          </xsl:if>
        </xsl:for-each>            <!--finish the re-walk of the list-->
      </xsl:otherwise>
    </xsl:choose> 
    <xsl:text> </xsl:text>        <!--display other associated values-->
    <xsl:value-of select="y"/>
    <xsl:text> </xsl:text>
    <xsl:value-of select="z"/>
    <xsl:text>&#xA;</xsl:text>                   <!--go to a new line-->
  </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

>"G. Ken Holman" wrote:
>> Produce:
>> 
>>  X   Y   Z
>>  1   1   a
>>      2   b
>>      3   c
>>  2   1   d
>>      2   e
>>  3   1   f
>> 
>> ..... suppressing redundant values for X.
>
>> Now, consider the problem where I want the same output from an unsorted
>> collection:
>> 
>> <?xml version="1.0"?>
>> <v>
>> <w><x>1</x><y>2</y><z>b</z></w>
>> <w><x>3</x><y>1</y><z>f</z></w>
>> <w><x>1</x><y>3</y><z>c</z></w>
>> <w><x>2</x><y>2</y><z>e</z></w>
>> <w><x>2</x><y>1</y><z>d</z></w>
>> <w><x>1</x><y>1</y><z>a</z></w>
>> </v>
>
>> So, my question is, can this problem be solved with the proposed working
>> draft in a single pass, and if not, is it important enough a problem that

>> it should be solved with version 1.0?

Thank you again, James, for your tutelage.

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

--
G. Ken Holman                  mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.           http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0  +1(613)489-0999  (Fax:-0995)
Website: XSL/XML/DSSSL/SGML services outline,  XSL/DSSSL shareware,
         stylesheet resource library, conference training schedule,
         commercial stylesheet training materials, on-line XSL CBT.
Next instructor-led XSLT Training:                  WWW8:1999-05-11


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


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.