2009-07-16 17 views
5

'un özniteliklerin bir alt kümesine ait olduğunu eşleştirmek mümkün müdür? Örneğin, her şeyi eşleştirmek istiyorum ama @ attr1 ve @ attr2. Aşağıdaki gibi bir şablon eşleşmesi ifadesi yazmanın bir yolu var mı, yoksa yanlış yöne mi gidiyorum?XSLT belirli özelliklerle eşleşmiyor

<xsl:template match="NOT(@attr1) and NOT(@attr2)">  

Teşekkür

cevap

7

kolay yolu iki şablonları kullanmak olacaktır: İlk şablon yok saymak isteyen başvurular yakalamak ve edecektir

<xsl:template match="@attr1|@attr2"/> 
<xsl:template match="@*"> 
    .... 
</xsl:template> 

basitçe onları yemek. İkincisi kalan niteliklerle eşleşecektir.

+0

Bu harika çalıştı. Teşekkür ederim. – Steve

+0

Komutta başka bir noktada, hariç tutulan öznitelikleri ele almak istiyorum. Bunun hala mümkün olup olmadığını biliyor musun? Temel olarak, eşleştirmem gereken yüzlerce özniteliğim var, hepsi aynı eylemi gerektiriyor ve sadece çok küçük bir alt grup özel işlem gerektiriyor. Bu yüzden, bunları işlemeye karar verene kadar özel işlem gerektirenleri hariç tutmak istiyorum. Temel olarak sadece özellik isimlerini ve atanan değeri yazdırmam gerekiyor. – Steve

+1

Aslında, yukarıdaki çözümünüzle birleştirilen modları kullanarak sorunu çözdüm. .... ... Steve

2

Neyin istenebileceği nedir? Bir özellik değiştirmek veya eksik tek kopyalama işlemi withing eğer eklemek isterseniz

<xsl:template match="@*[local-name()!='attr1' and local-name()!='attr2']"> 
    .... 
</xsl:template> 

bu özellikle yararlıdır: Aşağıdaki kullanın. Diğer cevap bu durumda çalışmaz. Örneğin.

... 
    <xsl:copy> 
    <xsl:attribute name="attr1"> 
     <xsl:value-of select="'foo'"/> 
    </xsl:attribute> 
    <xsl:apply-templates select="@*[local-name()!='attr1']|node()"/> 
    </xsl:copy> 
    ...