RE: [xsl] implement attribute inheritance

Subject: RE: [xsl] implement attribute inheritance
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Tue, 13 Jul 2004 16:18:34 +0100
Write a modified identity template rule:

<xsl:template match="*">
  <xsl:copy>
  <xsl:copy-of select="ancestor-or-self::*/@*"/>
  <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

The copy-of will select the attributes in document order (innermost element
last), and where two attributes with the same name are added to an element,
the last one wins, which is the effect you need.

Michael Kay 

> -----Original Message-----
> From: Emmanouil Batsis [mailto:Emmanouil.Batsis@xxxxxxxxxxx] 
> Sent: 13 July 2004 16:01
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] implement attribute inheritance
> 
> Dear gurus,
> 
> I'm trying to write a preprocessor script to transform implicit 
> inheritance semantics to actual nodes. The target effect is something 
> like namespace scopes but I want to inherit attribute-value pairs 
> instead of namespace URIs. Then, I'll be able and edit files 
> and assume 
> scope based inheritance of attributes for readability and 
> other reasons.
> 
> For example the following:
> 
> <root attr1="attr1">
>    <grantparent attr2="attr2">
>      <parent attr1="changed-by-parent">
>        <child>
>          <grandchild attr1="changed-by-grandchild"/>
>        </child>
>      </parent>
>    </grantparent>
> </root>
> 
> should become
> 
> <root attr1="attr1">
>    <grantparent attr1="attr1" attr2="attr2">
>      <parent attr1="changed-by-parent" attr2="attr2">
>        <child attr1="changed-by-parent" attr2="attr2">
>          <grandchild attr1="changed-by-grandchild" attr2="attr2"/>
>        </child>
>      </parent>
>    </grantparent>
> </root>
> 
> This of course is easy to implement for a finite number of attributes 
> using parameters and call-template, but how can I do this when 
> attributes are not known?
> 
> Any XSLT 1.0 pointers welcome. XSLT 2.0 pointers would be 
> interesting, 
> but I wont be able to use them.
> 
> Thanks,
> 
> Manos

Current Thread