Это можно указать в одном выражении 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]