Subject: RE: [xsl] Finding the position of an ancestor From: "Xia Li" <xli@xxxxxxxxxxxxx> Date: Tue, 20 Dec 2005 11:19:13 -0800 |
I think you need a way to select the sequence of <Step> nodes under each <StepList> so that you can get the position of a <Step> node in the sequence via position() function, and then call the template on the node <Field>. Something like this, <xsl:for-each select=".//StepList"> <xsl:for-each select="./Step"> <xsl:variable name="pos"><xsl:value-of select="position()"/></xsl:variable> <xsl:apply-templates select=".//Chunk[@type='FieldRef']/Field"> <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param> </xsl:apply-templates> </xsl:for-each> </xsl:for-each> <xsl:template match="Field"> <xsl:param name="pos"></xsl:param> <xsl:value-of select="ancestor::Step[1]/@name" /> <xsl:value-of select="$pos"/> </xsl:template> In this instruction, <xsl:value-of select="ancestor::Step[1]/@name" /> the right side expression of the "ancestor::Step[1]/@name" produces the attribute node of the nodes selected by the "ancestor::Step[1]", while the right side expression of the expression "ancestor::Step[1]/position()" yields the integers instead of nodes. I think that's why the processor throws exception on the instruction <xsl:value-of select="ancestor::Step[1]/position()"/> Lisa -----Original Message----- From: Nicholas Orr [mailto:nick@xxxxxxxxxxx] Sent: Monday, December 19, 2005 6:40 PM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] Finding the position of an ancestor I was wondering if someone can help me work out a position issue I'm struggling with. I've got some XML that has is in it : <FMPReport> <File> <ScriptCatalog> <Script> <StepList> <Step> ... </Step> <Step> ... </Step> <Step> ... </Step> <Step id="1" name="Perform Script" enable="True"> <Value> <DisplayCalculation> <Chunk type="FieldRef"> <Field id="32867" name="cPref Server Temp Folder" table="gPrefs" /> Then in the xslt I run a for each loop <xsl:for-each select="/FMPReport/File/ descendant::Chunk[@type='FieldRef']/Field"> <xsl:call-template name="RESULTSET" /> </xsl:for-each> which works fine, and I can get the data I need. I grab the name from the Step using : <xsl:value-of select="ancestor::Step[1]/@name" /> But how do I grab the step number? For example I want to know that this is step 4 in this script, by counting how many <Step> elements there are in the current <Script> element. I thought it would just be : <xsl:value-of select="ancestor::Step[1]/position ()"/> But that doesn't work, and gives me a parsing error. Am I maybe going about the whole thing wrong? Thanks, Nick
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Finding the position of a, Kamal Bhatt | Thread | Re: [xsl] Finding the position of a, Nicholas Orr |
Re: [xsl] Debugging XSLT + Introduc, Antonio Gallardo | Date | Re: [xsl] Finding the position of a, Nicholas Orr |
Month |