我有一些价值观:
//property[@name='bla1']/value
//property[@name='bla2']/value
//property[@name='bla3']/value
我需要将参数“is-active”更改为0,如果它们都等于零或为空。
如果bla1 = bla2 = bla3 =“0或空”则“is-active”= 0,其他1
我找到了例子,但我不知道如何使用它:
<xsl:attribute name="is-active">
<xsl:choose>
<xsl:when test="...">0</xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
请帮助我。
答案 0 :(得分:0)
您正在寻找的表达方式是......
<xsl:when text="//property[@name='bla1']/value='0'
and //property[@name='bla2']/value='1'
and //property[@name='bla3']/value='2'">
注意,您不一定需要属性元素前面的//
。如果您当前的上下文位于所有属性元素的父元素上,则可以将它们排除在外
<xsl:when text="property[@name='bla1']/value='0'
and property[@name='bla2']/value='1'
and property[@name='bla3']/value='2'">
或者,您可以使用键来获取值
<xsl:key name="bla" match="property/value" use="../@name" />
然后你可以写这个
<xsl:when text="key('bla', 'bla1')='0'
and key('bla', 'bla2')='1'
and key('bla', 'bla3')='2'">
答案 1 :(得分:0)
在XSLT 2中,我会这样做:
<xsl:attribute name="is-active"
select="
if (every $i in //property[@name=('bla1','bla2','bla3')]/value satisfies $i=0)
then 0
else 1
"/>
或者如果你想使用xsl:选择:
<xsl:attribute name="is-active">
<xsl:choose>
<xsl:when test="every $i in //property[@name=('bla1','bla2','bla3')]/value satisfies $i=0">0</xsl:when>
<xsl:otherwise>1</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
您可能还需要一种更通用的方法来选择值节点,因此您可以使用类似
的内容//property[matches(@name,'bla')]/value