Use ends with in XSLT v1.0

后端 未结 5 811
有刺的猬
有刺的猬 2020-11-30 09:58

I am trying to edit a current XSLT. The functionality I want is when the value of \"//code_no\" ends with 01 I want to edit the current city location. Currently this functio

相关标签:
5条回答
  • 2020-11-30 10:16

    XSLT 1.0 uses XPath 1.0, which does not include any function named ends-with. You can fake it using the technique found here:

    • How to find an image tag by filename using xpath
    0 讨论(0)
  • 2020-11-30 10:17

    Not exactly ends with, but nicer look than the substring-solution and still suitable for certain situations:

    <xsl:template match="*[contains(name(), 'substr')]"/>
    
    0 讨论(0)
  • 2020-11-30 10:19

    The XPath 1.0 equivalent of (the XPath 2.0) expression:

    ends-with($s, $t)
    

    is:

    $t = substring($s, string-length($s) - string-length($t) +1)
    

    You need just to substitute $s and $t in the last XPath expression with, respectively, the string to be tested, and the ending to be tested.

    Here is a complete example:

    <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:template match="x|y">
         <xsl:value-of select="name()"/> ends-with '_01': <xsl:value-of select=
         "'_01' = substring(., string-length() - 2)"/>
    =============   
     </xsl:template>
    </xsl:stylesheet>
    

    when this transformation is applied on the following XML document (none was provided in the question!!!):

    <t>
     <x>abcd_01</x>
     <y>abcd_11</y>
    </t>
    

    the wanted, correct result is produced:

    x ends-with '_01': true
    =============   
     y ends-with '_01': false
    =============   
    
    0 讨论(0)
  • 2020-11-30 10:29

    I used

    contains($string, $part) and normalize-space(substring-after($string, $part)) = ''
    

    Where

    we are checking if $string ends with $part

    0 讨论(0)
  • 2020-11-30 10:39

    In special cases, if you know that some character can not be contained in tag for example § you can do this:

    <xsl:if test="contains(concat(code_no,'§'),'01§')">
      <td align="left" width="33%"><SPAN style="font-size: 12pt; font-family: Arial;">
        <a> <b><u><xsl:value-of select="//city"/>, <xsl:value-of select="//state"/> 
        </u></b></a></SPAN></td>
    </xsl:if>
    
    0 讨论(0)
提交回复
热议问题