用C#或JavaScript扩展XSLT

今天在umbraca上看到这样一篇文章,可以利用C#和JavaScript扩展XSLT,说实在的,以前不知道啊,前几天看到有位博主实现了一个split方法,利用原有的xslt函数,现在看来可以直接编程实现一个split函数了哦。

下面看下怎么用C#和JavaScript扩展XSLT:

一、使用C#

先上代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:Stylesheet [  <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform%22
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:umbraco.library="urn:umbraco.library"
    xmlns:mycustomprefix="urn:mycustomprefix"
    exclude-result-prefixes="msxml umbraco.library mycustomprefix msxsl">
 

   <xsl:output method="xml" omit-xml-declaration="yes"/>

    <msxsl:script language="CSharp" implements-prefix="mycustomprefix">
      <![CDATA[
            public int? testNumber(int? num)
            {
                  if(num> 5 || num<= 0 || num== null)
                  {
                        return 5;
                  }
                  else
                  {
                        return num;
                  }
            }
          ]]>
    </msxsl:script>

    <xsl:param name="currentPage"/>
 

   <xsl:variable name="numberToTest" select="mycustomprefix:testNumber(number(/macro/numberToTest))"/>
    <xsl:template match="/">
        <!-- start writing XSLT -->
        <xsl:value-of select="$numberToTest"/>
    </xsl:template>
</xsl:stylesheet>

上面代码实现了一个testNumber函数,当输入数值大于5时返回5,小于5时返回数值。例子很简单,看一眼就明了,不过去对喜欢xslt的同仁带来很大的发挥空间哦。

二、用JavaScript

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:Stylesheet [  <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform%22
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:umbraco.library="urn:umbraco.library"
    xmlns:mycustomprefix="urn:mycustomprefix"
    exclude-result-prefixes="msxml umbraco.library mycustomprefix msxsl">
 

   <xsl:output method="xml" omit-xml-declaration="yes"/>

    <msxsl:script language="JavaScript" implements-prefix="mycustomprefix">
      <![CDATA[ 
            function testNumber(num)
            {
                  if(num> 5 || num<= 0 || num== null)
                  {
                        return 5;
                  }
                  else
                  {
                        return num;
                  }
            }
          ]]>
    </msxsl:script>

    <xsl:param name="currentPage"/>
    <xsl:variable name="numberToTest" select="mycustomprefix:testNumber(number(/macro/numberToTest))"/>
    <xsl:template match="/">
        <!-- start writing XSLT -->
        <xsl:value-of select="$numberToTest"/>
    </xsl:template>
</xsl:stylesheet>

和使用C#一样,不多说了

 

现在就可以实现那个split函数了,是吧?不用那个substring-beforesubstring-after了哦。

那篇文章的链接:http://www.cnblogs.com/jaxu/archive/2009/11/16/1603756.html

posted @ 2009-11-18 14:36  OOLi  阅读(1191)  评论(1编辑  收藏  举报