使用XSLT将XML转CSV时替换地址字段中的逗号
用XSLT替换XML地址字段中的逗号,解决CSV列错位问题
你的问题核心是CSV以逗号作为列分隔符,而地址字段里的逗号被错误识别成分隔符,导致列错位。我们可以通过XSLT的translate()函数来替换地址中的逗号,同时搭配normalize-space()优化地址格式,完美解决这个问题。
修改后的完整XSLT代码
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" > <xsl:output method="text" omit-xml-declaration="yes" indent="no"/> <xsl:template match="/"> Name,Age,Sex,Address <xsl:for-each select="//EmpDetails"> <xsl:value-of select="concat( Name, ',', Age, ',', Sex, ',', translate(normalize-space(Address), ',', ' '), '
' )"/> </xsl:for-each> </xsl:template> </xsl:stylesheet>
关键修改说明
translate()函数:这是解决逗号问题的核心,它会把地址字符串里的所有逗号(,)替换成空格(),语法为translate(要处理的字符串, 要替换的字符, 替换后的字符),你也可以根据需求把空格换成其他符号(比如分号;)normalize-space():自动清理地址里的多余空格、换行符,同时把多个空格合并成一个,让地址格式更整洁- 修正循环范围:原代码里
select="//Details"只会循环一次(因为Details是根节点),改成select="//EmpDetails"才能遍历每个员工的信息,输出多行数据
最终输出效果
处理后的CSV内容会是这样,列完全对齐,没有错位:
Name,Age,Sex,Address AAA,51,M,25 SilverStreet BBB,62,M,12 GoldStreet
内容的提问来源于stack exchange,提问作者venus
相关产品推荐
相关产品推荐

