我正在尝试声明一个具有默认值的变量,或者如果重复集中存在一个值以使用新的不同值。
这是我到目前为止所做的。
<xsl:variable name="lsind">
<xsl:value-of select="'N'"/>
<xsl:for-each select='./Plan/InvestmentStrategy/FundSplit'>
<xsl:choose>
<xsl:when test="contains(./@FundName, 'Lifestyle')">
<xsl:value-of select="'Y'"/>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:variable>
我想要的是./Plan/InvestmentStrategy/FundSplit/@FundName'的任何实例包含'LifeStyle然后lsind'Y'否则它会回落到默认值'N'。
我这样做就像我使用'否则最后一次出现可能将lsind设置回N?
有什么建议吗?
答案 0 :(得分:13)
<xsl:variable name="lsind">
<xsl:choose>
<xsl:when test="Plan/InvestmentStrategy/FundSplit[contains(@FundName, 'Lifestyle')]">
<xsl:text>Y</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>N</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
应该足够了
答案 1 :(得分:5)
这可以在单个XPath表达式中指定(即使在XPath 1.0中):
<xsl:variable name="vLsind" select=
"substring('YN',
2 - boolean(plan/InvestmentStrategy/FundSplit[@FundName='Lifestyle']),
1)"/>
示例1 :
<plan>
<InvestmentStrategy>
<FundSplit FundName="Lifestyle"/>
</InvestmentStrategy>
</plan>
<强>转化强>:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="vLsind" select=
"substring('YN',
2 - boolean(plan/InvestmentStrategy/FundSplit[@FundName='Lifestyle']),
1)"/>
<xsl:template match="/">
<xsl:value-of select="$vLsind"/>
</xsl:template>
</xsl:stylesheet>
<强>结果强>:
Y
示例2 :
<plan>
<InvestmentStrategy>
<FundSplit FundName="No Lifestyle"/>
</InvestmentStrategy>
</plan>
<强>结果强>:
N
<强>解释强>:
根据定义,boolean(some-node-set)
恰好在true()
非空时some-node-set
。
根据定义,number(true())
为1
而number(false())
为0
1和2联合提供给我们:number(boolean(some-node-set))
恰好在1
非空时some-node-set
,否则为0
。
其他单表达式解决方案:
XPath 1.0 :
translate(number(boolean(YourXPathExpression)), '10', 'YN')
XPath 2.0 :
if(YourXPathExpression)
then 'Y'
else 'N'
甚至:
('N', 'Y')[number(boolean(YourXPathExpression)) +1]