如何在XSLT的for-each循环中为元素添加分隔符?
给XSLT循环元素添加分隔符的不同版本实现
嘿,这个需求我太熟了!不同XSLT版本的功能差异确实会影响实现方式,下面分版本给你具体方案:
XSLT 1.0 实现方式
因为1.0没有内置的字符串拼接函数,咱们得手动判断元素位置来控制分隔符:
<xsl:for-each select="properties/property"> <!-- 输出当前元素的name值 --> <xsl:value-of select="name"/> <!-- 只有当不是最后一个元素时,才输出分隔符; --> <xsl:if test="position() != last()"> <xsl:text>;</xsl:text> </xsl:if> </xsl:for-each>
这里利用position()获取当前元素在节点集中的位置,last()获取节点集的总数量,通过判断避免在最后一个元素后多加分隔符。
XSLT 2.0 实现方式
2.0新增了string-join()函数,直接一步到位,不用写循环啦:
<!-- 直接拼接所有name节点内容,用;分隔 --> <xsl:value-of select="string-join(properties/property/name, ';')"/>
这个函数第一个参数是要拼接的节点序列,第二个参数是指定的分隔符,简洁又高效。
XSLT 3.0 实现方式
3.0在2.0的基础上更灵活,除了支持string-join(),还可以给xsl:value-of直接加separator属性:
<!-- 输出所有name节点内容,自动用;分隔 --> <xsl:value-of select="properties/property/name" separator=";"/>
这种方式更直观,连函数调用都省了,直接通过属性指定分隔符就行。
内容的提问来源于stack exchange,提问作者Jessica_the_owl
相关产品推荐
相关产品推荐

