SharePoint内容定制之XSLT高级用法——带返回值的函数调用
前言:通常大家使用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作为“函数”。
<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 > |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用