RE: [xsl] Concatenating the attribute values of ancestors

Subject: RE: [xsl] Concatenating the attribute values of ancestors
From: "Lakshmi narayana" <lchintala@xxxxxxxxxxxx>
Date: Fri, 8 Jul 2005 14:29:10 +0500
I am getting stack over flow exception....

-----Original Message-----
From: Mukul Gandhi [mailto:mukul_gandhi@xxxxxxxxx]
Sent: Friday, July 08, 2005 12:56 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Concatenating the attribute values of ancestors


Probably some sort of following logic is required..
Please be beware, this is not tested.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
version="1.0">

<xsl:output method="xml" indent="yes" />

<xsl:template match="node() | @*" priority="5">
  <xsl:copy>
    <xsl:apply-templates select="node() | @*" />
  </xsl:copy>
</xsl:template>

<xsl:template match="*" priority="6">
    <xsl:copy>
      <xsl:apply-templates select="@*" />
      <xsl:attribute name="newSeq">
        <xsl:call-template
name="concatenate-ancestor-attributes">
           <xsl:with-param name="attr_value"
select="''" />
           <xsl:with-param name="anestors"
select="ancestor::*" />
        </xsl:call-template>
      </xsl:attribute>
      <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

<xsl:template name="concatenate-ancestor-attributes">
    <xsl:param name="attr_value" />
    <xsl:param name="ancestors" />

    <xsl:choose>
      <xsl:when test="parent::*">
        <xsl:call-template
name="concatenate-ancestor-attributes">
	  <xsl:with-param name="attr_value"
select="concat($attr_value, parent::*/@seq)" />
	  <xsl:with-param name="anestors"
select="ancestor::*" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$attr_value" />
      </xsl:otherwise>
    </xsl:choose>
</xsl:template>

</xsl:stylesheet>

Regards,
Mukul


--- Lakshmi narayana <lchintala@xxxxxxxxxxxx> wrote:

>
> Hi
> I want a template which adds the attribute values of
> its ancestors and
> create an attribute to the current
> node. The value to this attribute is the result of
> conactination of all the
> node values added of its parents.
> For example,
> <A seq="1">
> 	<B seq="2" />
> 	<C seq="3">
> 		<D seq="4" />
> 	</C>
> </A>
> In the above xml, I want to concatenate all the seq
> values of all ancestors
> and its seq value also. And add new attribute
> to the current node as newSeq with the result
> concatenated value.
> Note : if seq attribute is not there concatenate
> value "0".
> Output should look like this.
> <A seq="1" newSeq="1">
> 	<B seq="2" newSeq="12"/>
> 	<C seq="3" newSeq="13">
> 		<D seq="4"  newSeq="134"/>
> 	</C>
> 	<E  newSeq="10">
> 		<F seq="5"  newSeq="105"/>
> 	</E>
> </A>
>
> Thanks
> Laxmi Narayana
>
>




____________________________________________________
Sell on Yahoo! Auctions  no fees. Bid on great items.
http://auctions.yahoo.com/

Current Thread