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]
Other format: [Raw text]

Re: Get an element with max. number of certain children element


Hi Xiaocun,

> I have researched archive and been using Jeni's solution on getting
> the element with max. number of certain children element via
> xsl:sort.
>
> <xsl:variable name="maxAttachment">
>   <xsl:for-each select="LineItem">
>     <xsl:sort select="count(Attachment)" order="descending" />
>     <xsl:if test="position() = 1">
>       <xsl:value-of select="."/>
>     </xsl:if>
>   </xsl:for-each>
> </xsl:variable>
>
> Then I wish to use this variable later in:
> <xsl:for-each select="$maxAttachment/Attachment">
>   <xsl:text>,Name,URL,Description</xsl:text>
> </xsl:for-each>
>
> The problem seems that xsl:variable will not produce node-set, which
> I need. I am aware of the solutions (via recursion or temp node-set)
> that uses $maxAttachment as a number (count(Attachment)), but is
> there a more elegent solution that does not require
> processor-dependent extensions?

If by 'more elegant', you mean shorter, then I think that what you're
after is a way of finding the LineItem elements that contain the
$maxAttachment number of Attachment elements. You could do this with:

  <xsl:for-each select="LineItem[count(Attachment) = $maxAttachment][1]
                          /Attachment">
    <xsl:text>,Name,URL,Description</xsl:text>
  </xsl:for-each>

[Note that if there's more than one LineItem with the same (maximum)
number of Attachment children, then you'll get the first one in
document order.]
  
It's short, but it is not very efficient - not only do you have to go
through all the LineItem elements in order to work out what the
$maxAttachment is, you have to go through them all again, doing
exactly the same calculation on them, to work out whether they're the
one with the maximum number of attachments. But you might not care
about performance, I guess...

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.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]