Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > XSL sorting of results from recursive calls to document()?

Reply
Thread Tools

XSL sorting of results from recursive calls to document()?

 
 
felciano
Guest
Posts: n/a
 
      10-06-2008
Hello --

I am trying to use XSL to process Amazon wishlist data to sort the
results by type (Apparel, then Books, then DVDs, etc). Amazon's web
services chunk up results in multiple pages of fixed size, e.g. 55
items gets returned in 5 XML pages of 10 items and a 6th of 5 items.
Each page is returned from a distinct URL call with a PageNum
parameter.

I've been trying to adapt a technique described at http://www.xefer.com/amazon/wishlist
that shows how to iterate through such pages through recursive
document() calls and a document counter:

<xsl:template name="counter">
<xslaram name="total"/>
<xslaram name="page"/>

<xsl:variable name="lookup"
select="concat($lookup, '&amp;ProductPage=', $page)

<xsl:if test="$page <= $total">
<xsl:apply-templates select="document($lookup)"/>
<xsl:call-template name="counter">
<xsl:with-param name="total" select="$total"/>
<xsl:with-param name="page" select="$page + 1"/>
</xsl:call-template>
</xsl:if>

</xsl:template>

This works, but I can't figure out how to sort the aggregate results.
Each document's nodes are processed separately before the next page is
retrieved. Is there a convention / idiom for how to handle sorting
when iterating via recursion across multiple document() calls?

Thanks,

Ramon
 
Reply With Quote
 
 
 
 
Martin Honnen
Guest
Posts: n/a
 
      10-06-2008
felciano wrote:

> I've been trying to adapt a technique described at http://www.xefer.com/amazon/wishlist
> that shows how to iterate through such pages through recursive
> document() calls and a document counter:
>
> <xsl:template name="counter">
> <xslaram name="total"/>
> <xslaram name="page"/>
>
> <xsl:variable name="lookup"
> select="concat($lookup, '&amp;ProductPage=', $page)
>
> <xsl:if test="$page <= $total">
> <xsl:apply-templates select="document($lookup)"/>
> <xsl:call-template name="counter">
> <xsl:with-param name="total" select="$total"/>
> <xsl:with-param name="page" select="$page + 1"/>
> </xsl:call-template>
> </xsl:if>
>
> </xsl:template>
>
> This works, but I can't figure out how to sort the aggregate results.
> Each document's nodes are processed separately before the next page is
> retrieved. Is there a convention / idiom for how to handle sorting
> when iterating via recursion across multiple document() calls?


Instead of using xsl:apply-templates select="document($lookup)" during
each template invocation you need to pass on those results the document
call returns. So give your template a third parameter

<xsl:template name="counter">
<xslaram name="total"/>
<xslaram name="page"/>
<xslaram name="page-elements" select="/.."/>

<xsl:variable name="lookup"
select="concat($lookup, '&amp;ProductPage=', $page)

<xsl:choose>
<xsl:when test="$page <= $total">
<xsl:call-template name="counter">
<xsl:with-param name="total" select="$total"/>
<xsl:with-param name="page" select="$page + 1"/>
<xsl:with-param name="page-elements" select="$page-elements |
document($lookup)/*"/>
</xsl:call-template>
</xsl:choose>
<xsltherwise>
<xsl:apply-templates select="$page-elements">
<xsl:sort select="foo"/>
</xsl:apply-templates/>
</xsltherwise>
</xsl:choose

</xsl:template>




--

Martin Honnen
http://JavaScript.FAQTs.com/
 
Reply With Quote
 
 
 
 
felciano
Guest
Posts: n/a
 
      10-10-2008
Very cool -- thank you for the quick response!

Ramon
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Recursive functions Vs Non-recursive functions - performance aspect vamsi C Programming 21 03-09-2009 10:53 PM
Two recursive calls inside of a recursive function n00m C++ 12 03-13-2008 03:18 PM
Displaying results as "pages" of a JTable and sorting across all results ... Monique Y. Mudama Java 1 06-28-2005 01:01 AM
XSL Question tp xsl:for-each and xsl:variable schaf@2wire.ch XML 1 05-27-2005 09:25 PM
sorting <xsl:for-each> versus <xsl:apply-templates> Sparko XML 0 07-09-2004 09:03 AM



Advertisments