2013-12-18 122 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

相关问题