Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How not to copy some attributes?

Tags:

I need to copy from input document to output document all attributes but one.

My input is like this:

<mylink id="nextButton" type="next" href="javascript:;" /> 

And I need output like this:

<a id="nextButton" href="javascript:;" /> 

If I use the following XSL:

<xsl:template match="mylink">     <a><xsl:copy-of select="attribute::*"/></a> </xsl:template> 

I get all attributes to output like this:

<a id="nextButton" type="next" href="javascript:;" /> 

But I want to ignore the "type" attribute. I've tried the following but none of them seems to work the way I need:

<xsl:copy-of select="attribute::!type"/> <xsl:copy-of select="attribute::!'type'"/> <xsl:copy-of select="attribute::*[!type]"/> <xsl:copy-of select="attribute::not(type)"/> 

How should I write my stylesheet to get needed output?

like image 714
martsraits Avatar asked Mar 23 '09 10:03

martsraits


2 Answers

Shortest form:

<xsl:template match="mylink">     <a><xsl:copy-of select="@*[name()!='type']"/></a> </xsl:template> 

Longer one (that's the first thing I came up with, I leave it for reference):

<xsl:template match="mylink">     <a>      <xsl:for-each select="@*">       <xsl:if test="name() != 'type'">        <xsl:attribute name="{name()}"><xsl:value-of select="."/></xsl:attribute>       </xsl:if>       </xsl:for-each>     </a> </xsl:template> 
like image 172
vartec Avatar answered Nov 02 '22 05:11

vartec


In XSLT 2.0:

<xsl:template match="mylink">   <a><xsl:copy-of select="@* except @type"/></a> </xsl:template> 
like image 37
yegor256 Avatar answered Nov 02 '22 04:11

yegor256