Sorting XSLT output items

Discussion in 'XML' started by Jure Sah, Feb 28, 2009.

  1. Jure Sah

    Jure Sah Guest

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Hello,

    I have an XSLT that checks several XML files (using document() ) and
    outputs their combined contents. The items inside it have a date
    argument according to which I would like to sort the result. How can
    this be done?

    That is... the usual sort will allow you to sort values from the input
    file, but since my XSLT uses several other files in succession and
    processes each of their items in a nested loop, I do not see where I
    should put the sort tag to achieve the desired effect.

    The only solution I see is to use an XSLT sort on the XSLT file output,
    but that seems silly.

    Thanks for any help in advance.

    LP,
    Jure
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.6 (GNU/Linux)
    Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

    iD8DBQFJqK5pB6mNZXe93qgRArpKAJ95RHmaUjJ2xoBDW2+fAyl22y5urgCeJZPC
    20XWXIcqPfzV0Ft0ynWW8Q8=
    =dTj9
    -----END PGP SIGNATURE-----
     
    Jure Sah, Feb 28, 2009
    #1
    1. Advertising

  2. Jure Sah wrote:

    > I have an XSLT that checks several XML files (using document() ) and
    > outputs their combined contents. The items inside it have a date
    > argument according to which I would like to sort the result. How can
    > this be done?


    <xsl:apply-templates select="document('file1.xml')/foo/bar |
    document('file2.xml')/foo/bar">
    <xsl:sort select="dateElement"/>
    </xsl:apply-templates/>

    Note that only XSLT 2.0 has support for sorting dates in the W3C XML
    schema date format. With XSLT 1.0 you will need to make sure you have
    the date in a format like '2009-02-28' that allows string sorting.



    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
     
    Martin Honnen, Feb 28, 2009
    #2
    1. Advertising

  3. Jure Sah

    Jure Sah Guest

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Martin Honnen pravi:
    > <xsl:apply-templates select="document('file1.xml')/foo/bar |
    > document('file2.xml')/foo/bar">
    > <xsl:sort select="dateElement"/>
    > </xsl:apply-templates/>


    I can't use that, my files are defined in the XML file I am processing.

    Any additional ideas?

    LP,
    Jure
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.6 (GNU/Linux)
    Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

    iD8DBQFJqga1B6mNZXe93qgRAkB4AJ94ab4yjywTrzrMDvqagLpn+Kc3YwCgwJO0
    oPruOVHNsVhJUlmGhkULDXw=
    =5mF/
    -----END PGP SIGNATURE-----
     
    Jure Sah, Mar 1, 2009
    #3
  4. Jure Sah wrote:

    > Martin Honnen pravi:
    >> <xsl:apply-templates select="document('file1.xml')/foo/bar |
    >> document('file2.xml')/foo/bar">
    >> <xsl:sort select="dateElement"/>
    >> </xsl:apply-templates/>

    >
    > I can't use that, my files are defined in the XML file I am processing.
    >
    > Any additional ideas?


    Nevertheless you should be able to process the union of nodes in those
    documents and sort them. But you keep us guessing, show us your XML
    input(s) and the result you want to produce, then we can suggest a way
    how to solve that.

    --

    Martin Honnen
    http://JavaScript.FAQTs.com/
     
    Martin Honnen, Mar 1, 2009
    #4
  5. Jure Sah

    Jure Sah Guest

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    Martin Honnen pravi:
    >>> <xsl:apply-templates select="document('file1.xml')/foo/bar |
    >>> document('file2.xml')/foo/bar">
    >>> <xsl:sort select="dateElement"/>
    >>> </xsl:apply-templates/>

    >>
    >> I can't use that, my files are defined in the XML file I am processing.
    >>
    >> Any additional ideas?

    >
    > Nevertheless you should be able to process the union of nodes in those
    > documents and sort them. But you keep us guessing, show us your XML
    > input(s) and the result you want to produce, then we can suggest a way
    > how to solve that.


    My code is available here:
    http://dustwolf.ctrl-alt-del.si/downloads/XSLTaggregator_src.zip

    As the name says, the code is a RSS Aggregator. Picks the URLs of the
    RSS feeds to combine from an XML file and outputs the resulting feed.
    Everything works fine, except the results are not sorted by date.

    The code goes a little like this:
    <xsl:for-each select="feed:rss2">
    <xsl:variable name="myURL" select="." />
    <xsl:for-each select="document($myURL)/rss/channel/item">

    ...that is the two nested "for-each"es.

    Any ideas?

    Thanks.. really. :)

    LP,
    Jure
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.6 (GNU/Linux)
    Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

    iD8DBQFJqt9jB6mNZXe93qgRApx7AJ9ZV5a82giJvMzw/857+KlOaFjO6QCgomZ7
    4yAoOfSa7GSdnfIQH2YbtT8=
    =HeXO
    -----END PGP SIGNATURE-----
     
    Jure Sah, Mar 1, 2009
    #5
  6. Jure Sah wrote:

    > The code goes a little like this:
    > <xsl:for-each select="feed:rss2">
    > <xsl:variable name="myURL" select="." />
    > <xsl:for-each select="document($myURL)/rss/channel/item">
    >
    > ..that is the two nested "for-each"es.
    >
    > Any ideas?
    >


    just use one for-each then it's easier to sort over the whole collection.

    <xsl:for-each select="document(feed:rss2)/rss/channel/item">
    <xsl:sort select= something ...


    --
    http://dpcarlisle.blogspot.com
     
    David Carlisle, Mar 2, 2009
    #6
  7. Jure Sah

    Jure Sah Guest

    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1

    David Carlisle pravi:
    > just use one for-each then it's easier to sort over the whole collection.
    >
    > <xsl:for-each select="document(feed:rss2)/rss/channel/item">
    > <xsl:sort select= something ...


    That worked great! Thanks a bunch!

    LP,
    Jure
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.6 (GNU/Linux)
    Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

    iD8DBQFJrCKyB6mNZXe93qgRAm7NAJ44ULtgBzuybjIZLWlw5s280T3y7gCaAsPz
    SSxm9T0MZS6GTz8cAAoGnjg=
    =MWke
    -----END PGP SIGNATURE-----
     
    Jure Sah, Mar 2, 2009
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Gilles Kuhn
    Replies:
    0
    Views:
    448
    Gilles Kuhn
    Sep 15, 2003
  2. Bart Van Hemelen
    Replies:
    2
    Views:
    4,693
    Bart Van Hemelen
    Sep 4, 2006
  3. Larry Bud
    Replies:
    13
    Views:
    7,741
    Larry Bud
    Jan 7, 2008
  4. Ben
    Replies:
    2
    Views:
    923
  5. Anjan Bhowmik
    Replies:
    1
    Views:
    488
    Misbah Arefin
    Feb 14, 2008
Loading...

Share This Page