xsl-list
[Top] [All Lists]

RE: copy XML and add attributes to ancestors of given element

2003-03-12 12:24:11
[Mac Martine]
In the example provided I am trying to copy all elements, 
butwhen I find an element where @task='1', I want to give 
all of its ancestors an attribute called 'task' as well.

This will do it. I turned the requirement on its head. Rather than find all the 
ancestors of an element with an attribute "task='1'", I found all the elements 
with a descendant with an  attribute "task='1'". That made it much easier to do.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version="1.0">
    <xsl:output method="xml" indent="yes" encoding="UTF-8" />
    <xsl:template match = "/">
      <xsl:apply-templates />
    </xsl:template>
    <xsl:template match="node()[descendant::node()/@task='1']">
      <xsl:copy>
        <xsl:attribute name="task" />
        <xsl:for-each select="@*">
          <xsl:variable name="attrName"><xsl:value-of select="name()" 
/></xsl:variable>
          <xsl:attribute name="{$attrName}"><xsl:value-of select="." 
/></xsl:attribute>
        </xsl:for-each>
        <xsl:apply-templates />
      </xsl:copy>
    </xsl:template>
    <xsl:template match="node()|@*">
      <xsl:copy-of select="." />
    </xsl:template>
</xsl:stylesheet>
-- 
Charles Knell
cknell(_at_)onebox(_dot_)com - email


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



<Prev in Thread] Current Thread [Next in Thread>
  • RE: copy XML and add attributes to ancestors of given element, cknell <=