SharePoint内容定制之XSLT高级用法——带返回值的函数调用
2010-11-18 00:55
453 查看
前言:通常大家使用XSLT仅仅是用它进行简单的数据展示,但是如果涉及到复杂的逻辑处理,便变得无从下手。其实,在XSLT本身支持JavaScript, C#等语言自定义函数,只可惜SharePoint无情的把这一特性给屏蔽了。所以为了更多的实现的功能,我们不得不挖掘xsl:template的一些特殊用途——带返回值的函数调用,让它具备别的编程语言所拥有的灵活性。
xsl:template本身不是一个函数,在多数情况下,它只是作为一个内容输出的模块化工具,但是借助xsl:variable标签,我们可获取到xsl:template输出的内容,对其进行相关操作,从而实现带返回值的函数调用模拟,在此基础上完成更复杂的逻辑处理,弥补了SharePoint中不支持XSLT自定义函数的不足。同时,那些由于XSLT变量不能进行动态赋值所带来的问题亦可迎刃而解。详情请参看以下示例。
一.对字符串进行简单处理。
目标:从Lookup字段类型中提取标题信息。(注:Lookup字段类型的值格式为“ItemId;#ItemTitle”,例如:“2;#Hello, world”,所以在这里我们需要提取出“Hello, world”这一部分的值)
1. 定义template作为“函数”。
2. 调用“函数”并将对此Lookup1字段的值进行处理,并返回URL值给变量ExtractedUrl。
3. 执行结果
ExtractedUrl变量值:
Hello, world
二.实现递归/循环调用
目标:以“,”作为分隔符,将字段Contacts的值(“NA,NB,NC”)格式化为XML字符串。
1. 定义递归调用“函数”对字符串进行XML格式化。
2. 调用“函数”
3. 执行结果
ContactsXml变量值:
三.将字符串信息格式化为XML数据。
目标:以“,”作为分隔符,将字符串“NA,NB,NC”信息绑定到下拉菜单控件。
结合前面的内容,定义“函数”将XML字符串转换为可查询的XML数据,并将数据循环绑定到下拉菜单控件。
2. 调用“函数”。
3. 输出结果
xsl:template本身不是一个函数,在多数情况下,它只是作为一个内容输出的模块化工具,但是借助xsl:variable标签,我们可获取到xsl:template输出的内容,对其进行相关操作,从而实现带返回值的函数调用模拟,在此基础上完成更复杂的逻辑处理,弥补了SharePoint中不支持XSLT自定义函数的不足。同时,那些由于XSLT变量不能进行动态赋值所带来的问题亦可迎刃而解。详情请参看以下示例。
一.对字符串进行简单处理。
目标:从Lookup字段类型中提取标题信息。(注:Lookup字段类型的值格式为“ItemId;#ItemTitle”,例如:“2;#Hello, world”,所以在这里我们需要提取出“Hello, world”这一部分的值)
1. 定义template作为“函数”。
<xsl:template name="ExtractUrl"> <xsl:param name="input"/> <!- 截取“;#”后面的字符串 --> <xsl:value-of select="substring-after($input, ';#')"/> </xsl:template>
2. 调用“函数”并将对此Lookup1字段的值进行处理,并返回URL值给变量ExtractedUrl。
<xsl:variable name="ExtractedUrl"> <xsl:call-template name="ExtractUrl"> <xsl:with-param name="input" select="@Lookup1"/> </xsl:call-template> </xsl:variable>
3. 执行结果
ExtractedUrl变量值:
Hello, world
二.实现递归/循环调用
目标:以“,”作为分隔符,将字段Contacts的值(“NA,NB,NC”)格式化为XML字符串。
1. 定义递归调用“函数”对字符串进行XML格式化。
<xsl:template name="XmlWrapper"> <xsl:param name="input"/> <xsl:choose> <xsl:when test="contains($input,',')"> <!- 输出第一个“,”前面的字符串(item为自定义标签,可换成别的任意标签) --> <item> <xsl:value-of select="substring-before($input,',')"/> </item> <!- 递归处理剩余字符串 --> <xsl:call-template name="XmlWrapper"> <xsl:with-param name="input" select="substring-after($input,',')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <!- 不包含“,”直接输出内容 --> <item> <xsl:value-of select="$input"/> </item> </xsl:otherwise> </xsl:choose> </xsl:template>
2. 调用“函数”
<xsl:variable name="ContactsXml"> <!- 把内容输出到contacts标签内 --> <contacts> <xsl:call-template name="XmlWrapper"> <xsl:with-param name="input" select="@Contacts"/> </xsl:call-template> </contacts> </xsl:variable>
3. 执行结果
ContactsXml变量值:
<contacts> <item>NA</item> <item>NB</item> <item>NC</item> </contacts>
三.将字符串信息格式化为XML数据。
目标:以“,”作为分隔符,将字符串“NA,NB,NC”信息绑定到下拉菜单控件。
结合前面的内容,定义“函数”将XML字符串转换为可查询的XML数据,并将数据循环绑定到下拉菜单控件。
<xsl:template name="GenerateDDL"> <xsl:param name="input"/> <!- 将原始字符串格式化为XML字符串 --> <xsl:variable name="ContactsXml"> <contacts> <xsl:call-template name="XmlWrapper"> <xsl:with-param name="input" select="@Contacts"/> </xsl:call-template> </contacts> </xsl:variable> <select id="DDL-{generate-id()}"> <!- msxsl:node-set()函数将XML字符串转化为可查询的XML数据 --> <xsl:for-each select="msxsl:node-set($ContactsXml)/contacts/item"> <option> <xsl:value-of select="."/> </option> </xsl:for-each> </select> </xsl:template>
2. 调用“函数”。
<xsl:call-template name="GenerateDDL"> <xsl:with-param name="input" select="@Contacts"/> </xsl:call-template>
3. 输出结果
<select id="DDL-ID0EAAA"> <option>NA</option> <option>NB</option> <option>NC</option> </select>
相关文章推荐
- [转]SharePoint内容定制之XSLT高级用法——带返回值的函数调用
- SharePoint内容定制之XSLT高级用法——带返回值的函数调用
- [转]SharePoint内容定制之XSLT高级用法——使用Muenchian方法分组XML数据
- SharePoint内容定制之XSLT高级用法——使用Muenchian方法分组XML数据
- SharePoint内容定制之XSLT高级用法——使用Muenchian方法分组XML数据
- PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
- iOS 基于JavaScriptCore 不等webView加载完毕就交互,网页获取原生内容。 webView的高级用法之JS交互,js与oc的相互调用
- 小程序webview访问别人网页,微信小程序web-view调用第三方网站内容——小程序webview高级用法16
- PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
- query_posts函数用法:指定标签过滤或显示内容
- asp.net中内容页调用不了母版页定义的函数
- max()函数的高级用法
- 嗯,关于JS函数内部变量的赋值和调用以及this的用法
- X86和ARM:函数调用参数传递和返回值
- 从函数调用的角度,探讨JavaScript中this的用法
- wordpress中强大的调用文章函数query posts 用法
- Swift 2.0 函数 定义、调用、参数返回值、函数类型、嵌套函数
- 【Clojure 基本知识】 关于函数参数的各种高级用法
- Java函数不接受返回值调用
- sscanf函数的高级用法