求助:如何用XSLT将不同节点的同字段值以逗号拼接
解决XSLT拼接Workday报表中PayGroup描述符为逗号分隔值的问题
问题原因
你当前的XSLT输出空格分隔的结果,是因为直接使用xsl:value-of时,XSLT默认会用空格作为节点序列的分隔符,没有显式指定逗号分隔规则。
解决方案
根据你使用的XSLT版本,提供两种可行实现:
方案1:XSLT 2.0及以上(推荐)
利用原生的string-join()函数直接指定逗号分隔符,代码简洁高效:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday.report/bsvc"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <Paygroups> <xsl:value-of select="string-join(//wd:Report_Entry/wd:payGroup/@wd:Descriptor, ', ')"/> </Paygroups> </xsl:template> </xsl:stylesheet>
方案2:XSLT 1.0(兼容旧处理器)
XSLT 1.0没有string-join(),通过xsl:for-each结合位置判断添加逗号:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:wd="urn:com.workday.report/bsvc"> <xsl:output method="xml" indent="yes"/> <xsl:template match="/"> <Paygroups> <xsl:for-each select="//wd:Report_Entry/wd:payGroup/@wd:Descriptor"> <xsl:if test="position() > 1">, </xsl:if> <xsl:value-of select="."/> </xsl:for-each> </Paygroups> </xsl:template> </xsl:stylesheet>
关键注意事项
- 必须保证XSLT中
wd命名空间与源XML的命名空间完全一致(示例中用urn:com.workday.report/bsvc,需根据实际调整)。 - 如果使用XSLT 2.0+,也可以给
xsl:value-of添加separator=", "属性替代string-join,效果相同:<xsl:value-of select="//wd:Report_Entry/wd:payGroup/@wd:Descriptor" separator=", "/>
示例验证
假设源XML结构如下:
<wd:Report_Data xmlns:wd="urn:com.workday.report/bsvc"> <wd:Report_Entry> <wd:payGroup wd:Descriptor="Weekly Hourly"/> </wd:Report_Entry> <wd:Report_Entry> <wd:payGroup wd:Descriptor="Monthly Salaried"/> </wd:Report_Entry> </wd:Report_Data>
使用上述任一方案,输出结果均为:
<Paygroups>Weekly Hourly, Monthly Salaried</Paygroups>
内容的提问来源于stack exchange,提问作者Sridhar Reddy Lenkala
相关产品推荐
相关产品推荐

