Subject: RE: [xsl] Getting max attribute value of an element by attribute value... From: "Brinkman, Theodore" <Theodore.Brinkman@xxxxxxxxxxxxxxxxxxxx> Date: Wed, 28 Nov 2001 11:54:18 -0500 |
I've got another question involving the same block of XML. The following template USED to work, but now $total = NaN, and I can't figure out why. XSL - - - - - <xsl:template name="hitPoints"> <xsl:variable name="base" select="sum(classes/class/@hp)"/> <xsl:variable name="mod"><xsl:call-template name="conMod"/></xsl:variable> <xsl:variable name="level" select="count(classes/class)"/> <xsl:variable name="tough" select="count(feats/feat[normalize-space(@name) = 'Toughness'])"/> <xsl:variable name="total" select="$base + ($mod * $level) + ($tough * 3)"/> <xsl:value-of select="$total"/> = <xsl:value-of select="$base"/> + (<xsl:value-of select="$mod"/> * <xsl:value-of select="$level"/>) + (<xsl:value-of select="$tough"/> * 3) </xsl:template> - - - - - XML - - - - - <classes> <class name="Fighter" short="Ftr" level="1" hp="10" uri="../class/fighter.xml"/> <class name="Rogue" short="Rog" level="1" hp="3" uri="../class/rogue.xml"/> <class name="Fighter" short="Ftr" level="2" hp="5" uri="../class/fighter.xml"/> </classes> - - - - - <xml:call-template name="hitPoints"/> should return: 26 = 17 + (+2 * 3) + (1 * 3) But instead I get: NaN = 17 + (+2 * 3) + (1 * 3) All of the xsl:call-template calls within hitPoints return the proper values. What am I missing here? - Theo -----Original Message----- From: cutlass [mailto:cutlass@xxxxxxxxxxx] Sent: Wednesday, November 28, 2001 10:08 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Getting max attribute value of an element by attribute value... sorry dyslexia kicking in ( replace preceding with following:: ) hehe <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:variable name="test" select="//class"/> <xsl:for-each select="/classes/class"> <xsl:sort select="@short"/> <xsl:sort data-type="number" order="ascending" /> <xsl:if test="not(@short = following::class/@short)"> <xsl:value-of select="@short"/>(<xsl:value-of select="@level"/>)<xsl:if test="not(position() = last())">, </xsl:if> </xsl:if> </xsl:for-each> </xsl:template> </xsl:stylesheet> cheerse, jim fuller ----- Original Message ----- From: "Brinkman, Theodore" <Theodore.Brinkman@xxxxxxxxxxxxxxxxxxxx> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> Sent: Wednesday, November 28, 2001 2:34 PM Subject: [xsl] Getting max attribute value of an element by attribute value... > I have the following substructure in an XML file I'm working with. > > <classes> > <class name="Fighter" short="Ftr" level="1" hp="10" > uri="../class/fighter.xml"/> > <class name="Rogue" short="Rog" level="1" hp="3" > uri="../class/rogue.xml"/> > <class name="Fighter" short="Ftr" level="2" hp="5" > uri="../class/fighter.xml"/> > </classes> > > > I'm trying to get this as the output. > > Ftr(2), Rog(1) > > > Currently, I can only figure out how to get this: > > Ftr(1), Rog(1), Ftr(2) > > > The template I'm using currently stands as: > > <xsl:template name="listClasses"> > <xsl:for-each select="classes/class"> > <xsl:value-of select="@short"/>(<xsl:value-of > select="@level"/>)<xsl:if test="not(position() = last())">, </xsl:if> > </xsl:for-each> > </xsl:template> > > > How can I change the template to sort the <class>es so they are all grouped > with the first appearance of the class, and I only get the highest level of > the class inside the parenthesis? > > - Theo > > 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 -> |
---|---|---|
[xsl] Divide and Conquer implementa, Dimitre Novatchev | Thread | Re: [xsl] Getting max attribute val, Jörg Heinicke |
RE: [xsl] orphans and widows??, Mike Haarman | Date | Re: [xsl] orphans and widows??, Joerg Pietschmann |
Month |