XSLT:输出条件

时间:2014-01-28 07:00:44

标签: xslt

我有一些价值观:

//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>

请帮助我。

2 个答案:

答案 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