2009-03-23 29 views
18

Giriş belgesinden, çıktı niteliklerine sahip çıktı belgesine kopyalamam gerekiyor.Bazı özellikler nasıl kopyalanamaz?

Benim girdi şu şekildedir:

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

Ve böyle çıktı gerekir: Aşağıdaki XSL kullanmak durumunda

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

:

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

alıyorum herkese niteliklerini Bunun gibi çıktı:

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

Ancak "type" özelliğini yok saymak istiyorum. Aşağıdaki ancak bunların hiçbiri ihtiyacım şekilde çalışmak gibi görünüyor denedim:

<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)"/> 

nasıl stil gerekli çıktıyı almak için yazmalıyım?

cevap

31

En kısa biçim:

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

Uzun bir (yani ben ile gelen ilk şey, ben başvurmak için bırakın):

XSLT 2.0
<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> 
+0

Kısa biçim mükemmel çalıştı. Teşekkür ederim! – martsraits

+0

Bir özniteliğin adını değiştirmek için daha uzun olanı kullandım ("type 'türünü" class "olarak değiştirin). Aynı şeyi gerçekleştirecek daha kısa olan bir versiyonu var mı? –

-1

:

<xsl:template match="mylink"> 
    <a><xsl:copy-of select="@* except @type"/></a> 
</xsl:template> 
İlgili konular