xsl-list
[Top] [All Lists]

RE: Concatenating the attribute values of ancestors

2005-07-08 02:29:10
I am getting stack over flow exception....

-----Original Message-----
From: Mukul Gandhi [mailto:mukul_gandhi(_at_)yahoo(_dot_)com]
Sent: Friday, July 08, 2005 12:56 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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(_at_)osi-tech(_dot_)com> 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



--~------------------------------------------------------------------
XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to:
http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--






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

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--