如何根据XSLT 1.0中的一组值检查变量?

时间:2016-06-15 20:10:28

标签: xml xslt xslt-1.0

我有以下条件来测试

cursorAfter()

有没有办法像这样检查?

<xsl:if test="   $Occupation='5' 
              or $Occupation='7'  
              or $Occupation='N' 
              or $Occupation='M' 
              or $Occupation='J' 
              or $Occupation='V' 
              or $Occupation='W'">
  <xsl:value-of select="'Accounts'"/>        
</xsl:if>

4 个答案:

答案 0 :(得分:4)

假设列表中的所有内容都是单个字符:

<xsl:if test="string-length($occupation) = 1 and contains('57NWJM', $occupation)">
    <xsl:value-of select="'Accounts'"/>        
</xsl:if>

如果条目长于一个字符,则可以使用分隔字符。当然,此字符不得出现在列表中的任何值中。使用空格作为分隔字符,事情可能如下:

<xsl:if test="not(contains($occupation, ' ')) and contains(' foo bar baz ', concat(' ', $occupation, ' '))">
    <xsl:value-of select="'Accounts'"/>        
</xsl:if>

请确保在foo之前和baz之后不要忘记这些填充空格。

答案 1 :(得分:3)

您可以使用:

<xsl:if test="contains('57NMJ', $Occupation)">

但是当$Occupation =&#34; 7N&#34;时,这也会返回true。

为了防范这种情况,您可以使用:

<xsl:if test="contains('|5|7|N|M|J|', concat('|', $Occupation, '|'))">

答案 2 :(得分:0)

反过来可能会有效......

<xsl:if test="contains('57NWJM',$Occupation)">

答案 3 :(得分:0)

XSLT 2.0

你可以在XSLT 2.0中更干净地做到这一点:

$occupation = ('5','7','N','M','J','V','W')

XSLT 1.0

对于单字符值的情况,例如你的,这个XPath 1.0表达式,

translate($occupation,'7NMJVW','555555')='5'
$occupation57NMJV时,

将返回true W按要求提供。

对于单字符或多字符值的情况,请参阅Thomas W's answermichael.hor257k's answer,其中采用了test @class attribute values safely常用的技术:

contains(concat(" ", normalize-space(@class), " "), " target ")]