加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

xml – 可以在XSLT中模拟StringBuilder吗?

发布时间:2020-12-16 23:08:09 所属栏目:百科 来源:网络整理
导读:我试图在XSL中模拟StringBuilder行为.有没有办法做到这一点.鉴于XSLT是一种函数式编程语言,这似乎很难 解决方法 如果你正在查看一个节点集(只要你可以构造xpath来找到节点集),你就可以通过一点点的递归简单地获得累积的concats,这样做你可以添加任意位并且流
我试图在XSL中模拟StringBuilder行为.有没有办法做到这一点.鉴于XSLT是一种函数式编程语言,这似乎很难

解决方法

如果你正在查看一个节点集(只要你可以构造xpath来找到节点集),你就可以通过一点点的递归简单地获得累积的concats,这样做你可以添加任意位并且流入和流出它开始变得凌乱.

尝试这个为初学者(也加入):

<xsl:template match="/">
     <xsl:variable name="s">
        <xsl:call-template name="stringbuilder">
            <xsl:with-param name="data" select="*" /><!-- your path here -->
        </xsl:call-template>
     </xsl:variable>
     <xsl:value-of select="$s" /><!-- now contains a big concat string -->
</xsl:template>

<xsl:template name="stringbuilder">
    <xsl:param name="data"/>
    <xsl:param name="join" select="''"/>
    <xsl:for-each select="$data/*">
        <xsl:choose>
            <xsl:when test="not(position()=1)">
                <xsl:value-of select="concat($join,child::text())"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="child::text()"/>
            </xsl:otherwise>
        </xsl:choose>       
    </xsl:for-each>
</xsl:template>

可能需要对此进行各种扩展:也许您想要修剪,也许您想要通过层次结构进行隧道传输.我不确定是否存在防弹通用解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读