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