XPath/XSLT contains() for multiple strings

前端 未结 2 740
时光说笑
时光说笑 2021-01-21 13:46

Does contains() work for multiple words stored in a variable? Will the below one work? If it won\'t work, please help me with a solution.



        
相关标签:
2条回答
  • 2021-01-21 14:19

    I think multiple variables will not work with contains method. As per the defination:

    boolean contains(str1, str2)
    

    str1 : A string that might contain the second argument. str2: A string that might be contained in the first argument.

    Refer : https://msdn.microsoft.com/en-us/library/ms256195(v=vs.110).aspx

    You can use or operator:

    <xsl:when test="contains($games,'chess') or contains($games,'carrom')">CORRECT</xsl:when>
    
    0 讨论(0)
  • 2021-01-21 14:29

    Assuming that you're looking to do a logical OR of substring containment...

    First of all, this select is likely wrong1:

    <xsl:variable name="games" select="footballvolleyballchesscarrom"/>
    

    It's looking for an element named footballvolleyballchesscarrom. If you're trying to set games to the string footballvolleyballchesscarrom, change it to this:

    <xsl:variable name="games" select="'footballvolleyballchesscarrom'"/>
    

    Then, use either

    XSLT 1.0

    <xsl:when test="contains($games,'chess')
                 or contains($games,'carrom')">CORRECT</xsl:when>
    

    or

    XSLT 2.0

    <xsl:when test="matches($games,'chess|carrom')">CORRECT</xsl:when>
    

    to test whether $games contains one of your multiple substrings.


    1 If you really intended to select (possibly multiple) elements from the input XML here, there is another XSLT 2.0 option for testing the selected sequence against a set of possible values. If your input XML were, say,

    <games>
      <game>football</game>
      <game>volleyball</game>
      <game>chess</game>
      <game>carrom</game>
    </games>
    

    then this template,

    <xsl:template match="/">
      <xsl:variable name="games" select="//game"/>
      <xsl:if test="$games = ('chess','carrom')">CORRECT</xsl:if>
    </xsl:template>
    

    would output CORRECT because among the string values of the selected elements is at least one of chess or carrom.

    0 讨论(0)
提交回复
热议问题