xsl-list
[Top] [All Lists]

RE: Changing Attribute Value in all the ChildNodes at any level down the current node.

2004-05-27 23:52:26

Thanks for the suggestion. 

But the problem is I wanted to retain the other part of the original XML. It is 
something that I want to modify the property (Attribute) of sub tree while not 
touching the rest of Tree.

Something like:

<xsl:template 
match="//body/namespace/form/snip/csf/td[position()=1]/table[position()=2]">
        <xsl:copy>
                <xsl:apply-templates select="@*[not(name()='href')]"/>
                <xsl:apply-templates select="*|text()"/>
        </xsl:copy>
</xsl:template>

'Default Template
<xsl:template match="*|text()|@*">
        <xsl:copy>
                <xsl:apply-templates select="*|text()|@*"/>
        </xsl:copy>
</xsl:template>

And this thing doesn't works. Don't know why? 
May be Default template might reintroduce the attribute removed by first 
template. 

Will changing priority of first template would be of any help?

Thanks once again
Animesh


-----Original Message-----
From: Andreas L. Delmelle [mailto:a_l(_dot_)delmelle(_at_)pandora(_dot_)be]
Sent: Thursday, May 27, 2004 9:40 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: RE: [xsl] Changing Attribute Value in all the ChildNodes at any
level down the current node.


-----Original Message-----
From: Animesh Sharma [mailto:asharma(_at_)in(_dot_)firstrain(_dot_)com]


Hi,

I have to remove a particular attribute (in following example it
is "href") from all the ChildNodes of the particular node.

I tried to write template something as follows:

<xsl:template
match="//body/namespace/form/snip/csf/td[position()=1]/table[posit
ion()=2]">
      <xsl:apply-templates select="@*"/>
      <xsl:attribute name="href"/>

AFAIK, xsl:attribute is not a self-closing element, so if you really want to
create an empty href attribute, at least there should be
<xsl:attribute name="href"></xsl:attribute>

Although, I'm not sure whether this will work... (haven't needed or tested
anything like it)

If you just want to omit the href attribute from being output, you have two
options:

For both: remove the 'empty' xsl:attribute element you specified above. It
serves no purpose.

1. replace <xsl:apply-templates select="@*" /> by
   <xsl:apply-templates select="@*[not(name()='href')]" />

2. keep the current form of the apply-templates instruction, and define a
null template matching @href, like <xsl:template match="@href" />


Hope this helps!

Greetz,

Andreas


--+------------------------------------------------------------------
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>
--+--