XSLT 中的条件表达式

Conditional expression in XSLT

我需要根据某些值是否为空的条件将值传递给属性。如果不是,一个属性应该得到这个值,如果是,它得到另一个。

目前,假设我只得到其中一个,我只是按顺序传递这些值。例如,

<xsl:template match="/test">
    <Settings Checksum="{//test/metadata[@name='parChecksum']/@data}
        {//test/metadata[@name='root']/metadata[@name='parChecksum']/@data}" />
</xsl:template>

输入XML可能是这样的:

<test>
    <metadata name="root">
        <metadata name="parChecksum" data="90eee2"/>
    </metadata>
</test>

或者这个:

<test>
    <metadata name="parChecksum" data="e6f963"/>
</test>

我想要一个只选择其中一个的表达式,因为如果有两个值,属性将得到一个错误值。

XPath 2.0 及更高版本有一个 if (conditionExpression) then expression1 else expression2 表达式。也可以创建一个序列 (expression1, expression2),但只针对 select 第一个项目 (expression1, expression2)[1],在这种情况下,如果 expression1 评估为非空项目,则它是 selected,如果计算结果为空序列,则使用 expression2 的结果。