Re: [xsl] Searching in Sub-children from an Array

Subject: Re: [xsl] Searching in Sub-children from an Array
From: Florent Georges <darkman_spam@xxxxxxxx>
Date: Mon, 4 Dec 2006 17:50:49 +0100 (CET)
Houman Khorasani wrote:

  Hi

> There is somewhere in the xml document a <steps> element that
> contains several Ids:

> <Steps>111,222,333,444</Steps>

  Something like the following can help you.  Warning: not tested!

    <xsl:key name="my:id" match="*[@id]" use="@id"/>

    <xsl:function name="my:resolve-path" as="element()*">
      <xsl:param name="root" as="node()"/>
      <xsl:param name="path" as="xs:string"/>
      <xsl:variable name="steps" select="tokenize($path, ',')"/>
      <xsl:if test="exist($steps)">
        <xsl:sequence select="
            my:resolve-path-1(key('my:id', $steps[1], $root),
                              $steps)"/>
      </xsl:if>
    </xsl:function>

    <xsl:function name="my:resolve-path-1" as="element()*">
      <xsl:param name="current" as="element()"/>
      <xsl:param name="steps"   as="xs:string*"/>
      <xsl:sequence select="
          $current,
          if ( exist($steps) ) then
            my:resolve-path-1($current/*[@id eq $steps[1]],
                              $steps[position() gt 1])
          else
            ()"/>
    </xsl:function>

  You can then get the resolved path (that is, a sequence of elements,
whose the ids are the same as in steps, in the same order) by:

    <xsl:sequence select="my:resolve-path(/, steps)"/>

  Regards,

--drkm

























	

	
		
___________________________________________________________________________ 
Dicouvrez une nouvelle fagon d'obtenir des riponses ` toutes vos questions ! 
Profitez des connaissances, des opinions et des expiriences des internautes sur Yahoo! Questions/Riponses 
http://fr.answers.yahoo.com

Current Thread