2013-12-18 120 views
1

我有以下XML:選擇具有特定值的所有屬性

<file> 
    <content value="Test" /> 
    <content value="Empty" /> 
</file> 

我想用一個轉變,但我無法在這個例子中,選擇與「測試」的價值屬性。這是我的XSLT的相關部分:

<xsl:template match="@value"> 
    <xsl:attribute name="value"> 
    <xsl:text>succeeded</xsl:text> 
    </xsl:attribute> 
</xsl:template> 

如果我嘗試將比賽變成這樣的事情@value='Test'@value['Test']這是行不通的。我可以使用其完整路徑獲取元素,如//content[@value='Test'],但我需要該屬性。

有沒有辦法根據屬性值做這個替換?

回答

1

這是如何根據他們的價值選擇屬性:

<xsl:template match="@value[.='Test']"> 
    <xsl:attribute name="value"> 
    <xsl:text>succeeded</xsl:text> 
    </xsl:attribute> 
</xsl:template> 

在這裏,.意味着屬性的文本內容進行評估。

一個完整的例子,嵌入到恆等變換(使用XML片段作爲輸入):

<?xml version="1.0" encoding="utf-8"?> 

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:output method="xml" indent="yes"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="@value[.='Test']"> 
<xsl:attribute name="value"> 
    <xsl:text>succeeded</xsl:text> 
</xsl:attribute> 
</xsl:template> 

</xsl:stylesheet> 

考慮到您試圖實現此目標的其他方式,從你到了屬性的內容元素與/,而不是與尖括號:

<xsl:template match="content/@value"> 
+0

感謝@Mathias,它的工作,因爲我需要。 – Marlos

相關問題