123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- This stylesheet originates from the sample code published with the following book:
-
- Author: Sal Mangano
- Title: XSLT Cookbook
- Publisher: O'Reilly & Associates, Inc.
- ISBN 10: 0-596-00372-2
- ISBN 13: 9780596003722
- http://www.oreilly.com/catalog/xsltckbk
-
- examples: http://examples.oreilly.com/xsltckbk/
-
- Conditions on re-using the sample code:
-
- "
- Unless there is a specific prohibition on a book's catalog page,
- we put programming examples online to be used.
- The source of the code should be noted in any documentation
- and as a comment in the program itself.
- The attribution should include author, title, publisher, and ISBN.
- For further information, see our
- Policy on Re-Use of Code Examples: http://www.oreilly.com/pub/a/oreilly/ask_tim/2001/codepolicy.html.
- "
- -->
- <xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" id="str.find-last"
- xmlns:str="http://www.ora.com/XSLTCookbook/namespaces/strings" extension-element-prefixes="str">
- <xsl:template name="str:substring-before-last">
- <xsl:param name="input"/>
- <xsl:param name="substr"/>
-
- <xsl:if test="$substr and contains($input, $substr)">
- <xsl:variable name="temp" select="substring-after($input, $substr)" />
- <xsl:value-of select="substring-before($input, $substr)" />
- <xsl:if test="contains($temp, $substr)">
- <xsl:value-of select="$substr" />
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="input" select="$temp" />
- <xsl:with-param name="substr" select="$substr" />
- </xsl:call-template>
- </xsl:if>
- </xsl:if>
-
- </xsl:template>
- <xsl:template name="str:substring-after-last">
- <xsl:param name="input"/>
- <xsl:param name="substr"/>
-
- <!-- Extract the string which comes after the first occurence -->
- <xsl:variable name="temp" select="substring-after($input,$substr)"/>
-
- <xsl:choose>
- <xsl:when test="$substr and contains($temp,$substr)">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="input" select="$temp"/>
- <xsl:with-param name="substr" select="$substr"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$temp"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
- <xsl:template match="xsl:stylesheet[@id='str.find-last'] | xsl:include[@href='str.find-last.xslt'] " >
- <tests>
- <!-- before -->
- <test name="str:substring-before-last with no occurences of yes">
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="input" select=" 'No occurences' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
-
- <test name="str:substring-before-last starts with yes">
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="input" select=" 'yes occurences' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
- <test name="str:substring-before-last starts with yes and ends with yes">
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="input" select=" 'yes occurences yes' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
- <test name="str:substring-before-last 3 yes">
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="input" select=" 'yesyesyes' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
- <test name="str:substring-before-last empty input">
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
-
- <test name="str:substring-before-last empty search">
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="input" select=" 'No occurences' "/>
- </xsl:call-template>
- </test>
- <test name="str:substring-before-last large">
- <xsl:call-template name="str:substring-before-last">
- <xsl:with-param name="input" select=" 'yesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyesyes' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
- <!-- after -->
- <test name="str:substring-after-last with no occurences of yes">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="input" select=" 'No occurences' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
-
- <test name="str:substring-after-last starts with yes">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="input" select=" 'yes occurences' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
- <test name="str:substring-after-last starts with yes and ends with yes">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="input" select=" 'yes occurences yes' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
- <test name="str:substring-after-last 3 yes">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="input" select=" 'yesyesyes' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
- <test name="str:substring-after-last 3 yes then no">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="input" select=" 'yesyesyesno' "/>
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
-
- <test name="str:substring-after-last empty input">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="substr" select=" 'yes' "/>
- </xsl:call-template>
- </test>
-
- <test name="str:substring-after-last empty search">
- <xsl:call-template name="str:substring-after-last">
- <xsl:with-param name="input" select=" 'No occurences' "/>
- </xsl:call-template>
- </test>
- </tests>
- </xsl:template>
- <!--xsl:template match="text()"/-->
-
- </xsl:stylesheet>
|