[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] backtracking to find all parents till root[again]

Subject: Re: [xsl] backtracking to find all parents till root[again]
From: "Aron Bock" <aronbock@xxxxxxxxxxx>
Date: Tue, 24 May 2005 15:04:02 +0000


It's still not a watertight problem statement, but the following will produce what you want, and I imagine you can press it into better service if need be.

<?xml version="1.0" encoding="iso8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>

   <xsl:template match="/">
       <xsl:variable name="find" select="'NextTime'"/>

<xsl:apply-templates select="Top/SubConcepts/SubConcept/Value[contains(., $find)]"/>
<xsl:text>Parent: SubConcepts</xsl:text>

   <xsl:template match="Value">
       <xsl:text>Match Found: </xsl:text><xsl:value-of select="."/>

       <xsl:apply-templates select="parent::SubConcept[1]"/>

   <xsl:template match="SubConcept">
       <xsl:text>Parent: </xsl:text><xsl:value-of select="@name"/>

<xsl:apply-templates select="preceding-sibling::SubConcept[contains(Value, current()/@name)][1]"/>




How do I backtrack to the root element from the result-generating node? Hence if my given structure is of the form:

         <SubConcept id="990" name="Level1">
               <Child ref="567">Child1</Child>
               <Value ref="456">hasFeature BrokenBolt</Value>
         <SubConcept id="456" name="BrokenBolt">
               <Child ref="345">Child2</Child>
               <Value ref="123">hasProperty NextTime</Value>

I find my result in the <Value ref="123"> node with the contained value 'Time'. I can find the parent of this with the @name

Match found: Next
Parent: BrokenBolt
         Parent: Level1
         Parent: SubConcepts

Express yourself instantly with MSN Messenger! Download today - it's FREE! http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/

Current Thread