|
Subject: RE: [xsl] getting the longest text node From: "Lars Huttar" <lars_huttar@xxxxxxx> Date: Thu, 3 Apr 2003 11:02:07 -0600 |
To be more specific, you need to create a key:
<xsl:key name="elementsByName" match="/*/*" use="local-name()" />
and then use it to select just one element of each name-group:
<!-- select all elements that are the first of their name-group -->
<xsl:for-each select="/*/*[generate-id() =
generate-id(key('elementsByName', local-name())[1])]">
<!-- do a sorted for-each on elements of the current name-group -->
<xsl:for-each select="/*/*[local-name() = local-name(current())]">
<xsl:sort data-type="number" order="descending"
select="string-length(.)" />
<xsl:if test="position() = 1" />
<xsl:value-of select="concat(local-name(), ': ', .)" />
<br />
</xsl:if>
</xsl:for-each>
</xsl:for-each>
I haven't tested this but I think it will work.
Lars
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx]On Behalf Of florian
> Sent: Thursday, April 03, 2003 5:08 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] getting the longest text node
>
>
>
>
> right now i do it via:
>
> <xsl:for-each select="/*/*">
> <xsl:for-each select="/*/*[local-name = local-name(current())]">
>
> ...
>
> wrong?
>
>
>
>
> > hi!
> >
> > how could i access the nodes though, if all i know is their
> structure
> > but 'foo', 'orange' and 'apple' could be also any other name.. and
> > foo could also contain a flexible amount of children..
> >
> > all i could think off is some kinda akward looking looping.. : /
> >
> > ciao!
> > florian
> >
> >
> > > I just thought I'd provide a variation. I can't make any
> performance
> > > claims vs. a sort in a for-each. Maybe someone else knows.
> > >
> > > <xsl:template match="/">
> > > <xsl:apply-templates select="//orange">
> > > <xsl:sort data-type="number" order="descending"
> select="string-length(.)"/>
> > > </xsl:apply-templates>
> > > </xsl:template>
> > >
> > > <xsl:template match="orange">
> > > <xsl:if test="position()=1">
> > > <LongString type="{name()}" string-length="{string-length(.)}">
> > > <xsl:value-of select="."/>
> > > </LongString>
> > > </xsl:if>
> > > </xsl:template>
> > >
> > > -rick
> > >
> > > At 10:35 PM 3/11/03 +0100, you wrote:
> > >
> > > >hi!
> > > >
> > > >i have a xml document like this:
> > > >
> > > >
> > > ><root>
> > > > <foo>
> > > > <apple>a</apple>
> > > > <orange>oiasd</orange>
> > > > </foo>
> > > > <foo>
> > > > <apple>hellooooo</apple>
> > > > <orange>test</orange>
> > > > </foo>
> > > ></root>
> > > >
> > > >what would be the most performant and best way to get
> > > >the longest text of a apple node, and the longest text
> > > >of a orange node?
> > > >
> > > >thanks alot!
> > > >
> > > >ciao!
> > > >florian
> > > >
> > > >
> > > > XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
> >
> > Rick Taylor
> > XML Developer
> > PPDM Association
> >
> >
> > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
>
>
>
> XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] getting the longest text , Lars Huttar | Thread | [xsl] Best Practice: How to include, "Braumüller, Hans" |
| [xsl] dynamic header height in regi, Joerg Heinicke | Date | [xsl] data vs. xml, bix xslt |
| Month |