2005-04-19
使ããã㪠XSLT Tips
XPathã«ã¯ã
[å¼ç¨ï¼ substring-before(string, string)http://www.w3.org/TR/xpath#function-substring-before ãã] ã¨
[å¼ç¨ï¼ substring-after(string, string)http://www.w3.org/TR/xpath#function-substring-after ãã] ã¨ããæåå颿°ãããããã®äºã¤ã®é¢æ°ã¯ãã©ã¡ããï¼çªç®ã®å¼æ°ã«æå®ããæååãï¼çªç®ã®å¼æ°ã«æå®ããæååå
ã§æåã«è¦ã¤ãã£ãå ´åã«ãsubstring-before()颿°ãªãã°ãã®æååãããåãsubstring-after()颿°ãªãã°ãã®æååãããå¾ã«ããæååãè¿ããã¨ãã§ããããã®äºã¤ã®é¢æ°ã¯ãXSLTãè¨è¿°ããéã«ä½ãã¨å½¹ã«ç«ã¡ç¨ãããã¨ã®å¤ã颿°ã§ããããããã¨ã¯å¯¾æ¥µçã«ãããæååå
ã§ããæååãæå¾ã«è¦ã¤ãã£ãå ´åã«ããã®æååãããåæãã¯å¾ã«ããæååãåå¾ãããå ´åã«ã¯ã次ã®ãããªååä»ããã³ãã¬ã¼ããç¨ããã¨è¯ãã ããã
last-substring-before ãã³ãã¬ã¼ã
次ã®ãã³ãã¬ã¼ãè¨è¿°ã¯ãæå®æååã®æå¾ããæå®æåãæ¤ç´¢ãããsubstring-before()颿°ã®æçµæ¤ç´¢çã§ããã
<xsl:template name="last-substring-before">
<xsl:param name="p1"/>
<xsl:param name="p2"/>
<xsl:if test="contains($p1,$p2)">
<xsl:value-of select="substring-before($p1,$p2)"/>
<xsl:if test="contains(substring-after($p1,$p2),$p2)">
<xsl:value-of select="$p2"/>
</xsl:if>
<xsl:call-template name="last-substring-before">
<xsl:with-param name="p1" select="substring-after($p1,$p2)"/>
<xsl:with-param name="p2" select="$p2"/>
</xsl:call-template>
</xsl:if>
</xsl:template>弿°p2ã«æå®ããæååã弿°p1ã«æå®ããæååå
ã§æå¾ã«è¦ã¤ãã£ãå ´åã«ããã®æååãããåã«ããæååãè¿ãã弿°p2ã«æå®ããæååã弿°p1ã«æå®ããæååå
ã«å«ã¾ãã¦ããªãå ´åã¯ãç©ºã®æååãè¿ãã
ä¾ãã°ã次ã®ä¾ã¯ 1999/04 ãè¿ãã
<xsl:call-template name="last-substring-before">
<xsl:with-param name="p1" select="'1999/04/01'"/>
<xsl:with-param name="p2" select="'/'"/>
</xsl:call-template>last-substring-after ãã³ãã¬ã¼ã
次ã®ãã³ãã¬ã¼ãè¨è¿°ã¯ãæå®æååã®æå¾ããæå®æåãæ¤ç´¢ãããsubstring-after()颿°ã®æçµæ¤ç´¢çã§ããã
<xsl:template name="last-substring-after">
<xsl:param name="p1"/>
<xsl:param name="p2"/>
<xsl:choose>
<xsl:when test="contains($p1,$p2)">
<xsl:call-template name="last-substring-after">
<xsl:with-param name="p1" select="substring-after($p1,$p2)"/>
<xsl:with-param name="p2" select="$p2"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$p1"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>弿°p2ã«æå®ããæååã弿°p1ã«æå®ããæååå
ã§æå¾ã«è¦ã¤ãã£ãå ´åã«ããã®æååãããå¾ã«ããæååãè¿ãã弿°p2ã«æå®ããæååã弿°p1ã«æå®ããæååå
ã«å«ã¾ãã¦ããªãå ´åã¯ãç©ºã®æååãè¿ãã
ä¾ãã°ã次ã®ä¾ã¯ 01 ãè¿ãã
<xsl:call-template name="last-substring-after">
<xsl:with-param name="p1" select="'1999/04/01'"/>
<xsl:with-param name="p2" select="'/'"/>
</xsl:call-template>