如何用XSLT将XML转换为可直接用作配置文件的CSV?
用XSLT实现XML到目标CSV格式的转换
完全可以通过XSLT实现这个需求,而且能直接输出未转义的<和>符号,不需要后续在Excel里做查找替换。核心是利用XSLT的禁用输出转义特性,同时指定输出为纯文本格式(避免XML的默认转义规则)。
实现思路
- 设定XSLT输出为
text类型,而非默认的XML,这样不会触发XML特殊字符的自动转义。 - 对需要输出的
<和>标签,使用<xsl:text disable-output-escaping="yes">强制输出原始字符,不转义成</>。 - 严格按照你期望的CSV格式拼接内容,注意CSV中双引号的转义规则:要输出一个双引号,需要写两个连续的双引号。
完整XSLT代码
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- 指定输出为纯文本,编码UTF-8 --> <xsl:output method="text" encoding="UTF-8"/> <xsl:template match="/"> <!-- 遍历所有project节点 --> <xsl:for-each select="/*/project"> <!-- 拼接CSV行:按照目标格式插入name和value值 --> <xsl:text>"<add project="""</xsl:text> <xsl:value-of select="name"/> <xsl:text>""" value="""</xsl:text> <xsl:value-of select="value"/> <xsl:text>""" />" </xsl:text> </xsl:for-each> </xsl:template> </xsl:stylesheet>
代码说明
<xsl:output method="text">:告诉XSLT处理器输出纯文本,不套用XML结构,避免自动转义特殊字符。disable-output-escaping="yes":在<xsl:text>中启用这个属性后,里面的<和>会被直接输出,不会被转义成实体引用。 :代表换行符,确保每个project对应一行CSV内容,方便Excel识别。- CSV中的双引号处理:目标格式里的
""需要用""表示(因为在XSLT的XML语境中,双引号要用实体引用,两个实体引用就对应CSV里的两个双引号)。
使用方式
用任意XSLT处理器(比如Saxon、Xalan,或者在线XSLT转换工具)将你的原始XML和上述XSLT文件结合处理,得到的结果就是可以直接粘贴到Excel的CSV内容,完全符合你要的格式,不需要额外替换操作。
内容的提问来源于stack exchange,提问作者Cryothic
相关产品推荐
相关产品推荐

