| Subject: Re: [xsl] Select Deepest Node only in Iteration From: "J. Zhang" <j.zhang@xxxxxx> Date: Thu, 12 Jul 2007 17:45:51 +0200 | 
Hi Michael,
I am a getting an error with your Saxon parser. :)
This is the error:
XTSE0010: An xsl:if element must not contain an xsl:sort element
Failed to compile stylesheet. 1 error detected.
This is my code:
<xsl:for-each select="document($filename)">
<xsl:for-each select="//*">
					
<xsl:if test="matches(string(self::node()), concat('\W', $term, '\W'),
'im')">
<xsl:sort select="count(ancestor::node)" order="descending"/>
<xsl:if test="position()=1">
<xsl:text>
</xsl:text>						
<path>/<xsl:value-of select="saxon:path()"/></path>
<xsl:text>
</xsl:text>
							
</xsl:if>
						
</xsl:if>
					
</xsl:for-each>
				
</xsl:for-each>
I hope you can help me.
Thanks!
Michael Kay wrote:
> The simplest change to your code is to add an xsl:sort to your for-each that
> sorts the matching nodes by descending depth. That's <xsl:sort
> select="count(ancestor::node)" order="descending"/>. Then you can return a
> value only when position()=1. 
> 
> Michael Kay
> http://www.saxonica.com/
> 
>> -----Original Message-----
>> From: J. Zhang [mailto:j.zhang@xxxxxx] 
>> Sent: 12 July 2007 15:47
>> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
>> Subject: [xsl] Select Deepest Node only in Iteration
>>
>> I have already checked the XSL FAQ at 
>> http://www.dpawson.co.uk/ and explored the history of this 
>> mailinglist. I could not find the answer, that is why I am 
>> posting here.
>>
>> I am matching the content of XML elements this way in a 
>> for-each iteration:
>>
>> xsl:if test="matches(string(self::node()), concat('\W', 
>> $term, '\W'), 'im')">
>>
>> I return the absolute path where $term occurs in the 
>> transformation. The result after the transformation is for 
>> example this for Word 1:
>>
>> //article
>>
>> //article/body[1]
>>
>> //article/body[1]/section[6]
>>
>> //article/body[1]/section[6]/normallist[6]
>> 							
>> //article/body[1]/section[6]/normallist[6]/item[1]
>>
>> The problem is that I only want the longest path, e.g. the 
>> deepest node of this leave. I need to set a condition that 
>> only returns something when the for-each iteration has come 
>> to the longest path of this leave, but I could not find a way 
>> to do this.
>>
>> Any help would be greatly appreciated! Thanks!
| Current Thread | 
|---|
| 
 | 
| <- Previous | Index | Next -> | 
|---|---|---|
| RE: [xsl] Select Deepest Node only , Michael Kay | Thread | Re: [xsl] Select Deepest Node only , David Carlisle | 
| Re: [xsl] Alternative for current-g, David Carlisle | Date | Re: [xsl] Select Deepest Node only , David Carlisle | 
| Month |