XSLT如何使用concat函数将tasks、talents、Benefits字段拼接为新字段
XSLT多字段拼接生成新输出字段实现方法
要将tasks、talents、Benefits三个字段的内容合并为全新的输出字段,直接使用XSLT内置的字符串拼接能力即可,不需要额外扩展,以下是兼容所有XSLT版本的通用实现:
通用实现(兼容XSLT 1.0/2.0/3.0)
使用XPath原生的concat()函数把三个字段的取值串接起来,你可以自定义新字段的标签名,也可以按需在字段内容之间插入分隔符:
<!-- 合并后的新字段,标签名combinedInfo可根据业务需求替换 --> <combinedInfo> <xsl:value-of select="concat( *[local-name()='tasks'], *[local-name()='talents'], *[local-name()='Benefits'] )"/> </combinedInfo> <!-- 原代码中单独输出的三个字段如果不需要可以直接删除,需要保留则维持原有写法即可 --> <talents> <xsl:value-of select="*[local-name()='tasks']"/> </talents> <expectations> <xsl:value-of select="*[local-name()='talents']"/> </expectations> <benefits> <xsl:value-of select="*[local-name()='Benefits']"/> </benefits>
如果需要在三个字段内容之间加分隔符(比如顿号、空格、换行),直接在concat()中插入对应的分隔字符串参数即可,例:三个内容之间用换行分隔的写法:
<combinedInfo> <xsl:value-of select="concat( *[local-name()='tasks'], ' ', <!-- 是XML换行转义符,替换成'、'就是用顿号分隔,替换成' '就是用空格分隔 --> *[local-name()='talents'], ' ', *[local-name()='Benefits'] )"/> </combinedInfo>
XSLT 2.0+简化写法
如果你使用的是XSLT 2.0及以上版本,可以省略concat()函数,直接在xsl:value-of中传入多个节点路径,通过separator属性指定分隔符,写法更简洁:
<combinedInfo> <!-- separator属性设置为你需要的分隔符,不需要分隔就设为空字符串 --> <xsl:value-of select="*[local-name()='tasks'], *[local-name()='talents'], *[local-name()='Benefits']" separator="、"/> </combinedInfo>
注意:你当前使用
*[local-name()='xxx']是忽略命名空间匹配节点的写法,如果源XML没有自定义命名空间,直接写select="tasks"这类路径的选择性能更高;只有当节点带命名空间前缀、直接写节点名无法选中时,才需要用local-name()的匹配方式。
内容的提问来源于stack exchange,提问作者muehleissta
相关产品推荐
相关产品推荐

