我有以下xml:
<file>
<content value="Test" />
<content value="Empty" />
</file>
我想使用转换,但在本例中我无法选择值为'Test'的属性。这是我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']
,但我需要属性。
有没有办法根据属性值进行替换?
答案 0 :(得分: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">