This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Sort problem


Hi Mick,

Use:

<xsl:for-each select="root/line/word[not(@type = 'end')]">
  <xsl:sort
select="concat(.,self::*[contains(.,'-')]/following::word[@type='end'])"/>
  <xsl:choose>
    <xsl:when test="contains(., '-')">
      <xsl:value-of select="substring-before(., '-')"/>
      <xsl:value-of select="following::word[@type='end']"/>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="."/>
    </xsl:otherwise>
  </xsl:choose>
  <xsl:if test="position() != last()">
    <xsl:text>&#xA;</xsl:text>
  </xsl:if>
</xsl:for-each>


Cheers,
Dimitre Novatchev.

Mick <mick at telekabel dot nl> wrote:

Hi all,

I have the following problem when sorting a list of words. My xml is:

<root>
	<line lineID="1">
		<word wordID="1">ABC-</word>
		<word wordID="2">ABCD</word>
	</line>
	<line lineID="2">
		<word wordID="1" type="end">DEF</word>
		<word wordID="2">XYZ</word>
	</line>
</root>

I have a stylesheet to create an alphabetical list of words. If a word
contains a dash, it means it has to be joined with the following word
that
has an attribute type="end". The xsl I use is:

<xsl:for-each select="root/line/word">
<xsl:sort select="."/>
	<xsl:choose>
		<xsl:when test="contains(., '-')">
			<xsl:value-of select="substring-before(., '-')"/>
			<xsl:value-of select="following::word[@type='end']"/><br/>
		</xsl:when>
		<xsl:when test="@type='end'"></xsl:when>
		<xsl:otherwise>
			<xsl:value-of select="."/>
		</xsl:otherwise>
	</xsl:choose>
</xsl:for-each>

The result is:

ABCDEF
ABCD
XYZ

which is not what I want because the alphabetical order is wrong. The
xsl:sort only sorts on the 'substring-before' part ABC minus the dash)
and
ignores the 'following::word' bit (DEF). I want the output to be:

ABCD
ABCDEF
XYZ

How can I get the result of the 'substring-before' part and the
'following::word' part to be handled as one entity?
I'm using IE and MSXML3.

-mick




__________________________________________________
Get personalized email addresses from Yahoo! Mail - only $35 
a year!  http://personal.mail.yahoo.com/

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]