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
的结果。
我需要根据某些值是否为空的条件将值传递给属性。如果不是,一个属性应该得到这个值,如果是,它得到另一个。
目前,假设我只得到其中一个,我只是按顺序传递这些值。例如,
<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
的结果。