打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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”信息绑定到下拉菜单控件。 

  1. 结合前面的内容,定义“函数”将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>

 

 

 

 

 

 

 

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Sharepoint 2013内容查询Web部件自定义显示样式(实战)
Recipe 11.2. Creating Reusable SVG Generation Utilities for Graphs and Charts
XSLT做数学运算
【Python】input()函数用法小结
详解模板渲染引擎 jinja2
动网论坛7.10Sp1疑难杂症问答
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服