Re: [xsl] First Occurance Problem

Subject: Re: [xsl] First Occurance Problem
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Mon, 24 Mar 2003 17:12:45 +0000
Hi Deepak,

> I have the following template
>
> <agg1>
>    <agg2>             <----Can repeat 1 to N times
>       <tag1></tag1>   <----Both tag1 and tag2 can be empty
>       <tag2></tag2>
>    </agg2>
> </agg1>
>
> Problem:
>
> I want to return a xml with the following template
>
> <agg1>
>    <agg2>             <----Can occur only once
>       <tagx></tagx>   <----tag1 will have the value from the first
>                            populated occurance of tag1 in the source xml
>    </agg2>
> </agg1>

You can locate the value of the first populated occurrence of <tag1>
with:

  (/agg1/agg2/tag1[string(.)])[1]

The [string(.)] predicate tests whether the <tag1> element has a
string value or not. The brackets ensure that the [1] predicate
applies to the position of the <tag1> element within all the <tag1>
elements in the document rather than just those found within a
particular <agg2> element. You can therefore build your result as:

<xsl:template match="agg1">
  <agg1>
    <agg2>
      <tagx>
        <xsl:value-of select="(agg2/tag1[string(.)])[1]" />
      </tagx>
    </agg2>
  </agg1>
</xsl:template>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread