基于XSLT 2.0将数组属性值合并为带指定分隔符的单个属性
XSLT 2.0 处理Reference节点生成目标格式方案
示例输入XML
<Request> <Reference id="REF1"> <Value>VAL1</Value> </Reference> <Reference id="REF2"> <Value>VAL2</Value> </Reference> <Reference id="REF3"> <Value>VAL3</Value> </Reference> </Request>
解决方案XSLT代码
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <TargetSystem> <CombinedReferences> <xsl:value-of select="concat('~', string-join(//Reference/concat(@id, ':', Value), '~'), '~')"/> </CombinedReferences> </TargetSystem> </xsl:template> </xsl:stylesheet>
输出结果
<TargetSystem> <CombinedReferences>~REF1:VAL1~REF2:VAL2~REF3:VAL3~</CombinedReferences> </TargetSystem>
关键说明
- 单纯用
value-of加分隔符只能处理元素间的分隔,无法直接为整体添加开头和结尾的波浪线,因此需要用concat包裹string-join的结果 string-join(//Reference/concat(@id, ':', Value), '~')先将每个Reference节点的id和Value拼接为id:Value格式,再用~连接所有组合- 最后通过
concat给拼接好的字符串前后各追加一个~,完全匹配目标系统的格式要求
内容的提问来源于stack exchange,提问作者HKmar
相关产品推荐
相关产品推荐

