XML转CSV时XSLT字段替换逻辑错误排查求助
问题原因排查
- 核心问题出在XSLT的替换逻辑没加字段名称限定:你只判断了值等于"W",但没指定只有
StdHoursFreq这个字段才执行替换,导致所有值为"W"的字段(比如PayFrequency)都被统一替换成了"Weekly"。
修复方案
假设你原来的错误替换代码是这样的:
<xsl:value-of select="replace(., 'W', 'Weekly')"/>
改成带字段判断的逻辑就行,分两种场景:
场景1:直接匹配XML元素名称
如果XML里的字段是独立元素(比如<StdHoursFreq>W</StdHoursFreq>),用元素名称做判断:
<xsl:choose> <xsl:when test="local-name() = 'StdHoursFreq' and . = 'W'">Weekly</xsl:when> <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise> </xsl:choose>
场景2:基于headerFieldsMap映射判断
如果是通过<headerFieldsMap>的键值对映射表头(比如映射里的key对应XML字段名),先拿到当前处理的字段键名再判断:
<!-- 先获取当前表头对应的XML字段键 --> <xsl:variable name="currentFieldKey" select="对应的映射key变量"/> <xsl:choose> <xsl:when test="$currentFieldKey = 'StdHoursFreq' and . = 'W'">Weekly</xsl:when> <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise> </xsl:choose>
验证注意事项
- 测试
StdHoursFreq值为"W"时,输出是否为"Weekly" - 测试其他字段(如PayFrequency)值为"W"时,是否保持原"W"不变
- 确认其他字段的正常转换逻辑不受影响
内容的提问来源于stack exchange,提问作者jerry
相关产品推荐
相关产品推荐

