I get the impression that you want the final sort to apply to all the
numbers, not just to each Title-group in turn. That means the second
for-each-group can't be inside the first for-each-group. You need to capture
all the numbers in all the titles in a variable, which you achieve by
wrapping the xsl:for-each-group in xsl:variable, and then apply grouping on
the contents of this variable. Or in fact, distinct-values. So:
<xsl:variable name="all-numbers" as="xs:decimal*">
<xsl:for-each-group select=".....//Title">
...
<xsl:sequence select="xs:decimal(.)"/>
...
</xsl:for-each-group>
</xsl:variable>
<xsl:perform-sort select="distinct-values($all-numbers)">
<xsl:sort/>
</xsl:perform-sort>
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: Philip Vallone [mailto:philip(_dot_)vallone(_at_)verizon(_dot_)net]
Sent: 26 October 2006 12:19
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Sorting and grouping with xsl:analyze
Hello,
I am having trouble grouping and sorting a string. From a
previous post (RE:
[xsl] Function to Extract integer from string), I extract
some integers from a string. Now I am trying to group & sort
those integers. The following XSLT outputs to html:
<xsl:for-each-group select="$XML1/manual/title/document(.)//Title"
group-by=".">
<xsl:if test="contains(., '§')">
<xsl:variable name="chap" select="."/>
<xsl:variable name="all"
select="replace(.,'[^ 0-9\.]','')"/>
<xsl:variable name="numbers" as="xs:string*">
<xsl:analyze-string select="."
regex="\d+\.?\d*">
<xsl:matching-substring>
<xsl:sequence
select="."/>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:variable>
<xsl:for-each-group select="current-group()"
group-by="$numbers">
<xsl:sort/>
<xsl:for-each select="current-grouping-key()">
<xsl:value-of select="."/>
<p/>
</xsl:for-each>
</xsl:for-each-group>
</xsl:if>
</xsl:for-each-group>
The XML file looks like this:
<manual>
<title>MelChapter1.xml</title>
<title>Chapter9a.xml</title>
</manual>
The Results look like this:
21.197
21.197
21.199
91.407
1
121.133
91.12
121.135
I want to have it look like this:
1
21.197
21.199
91.12
91.407
121.133
121.135
Any help would be great.
Phil
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--