使用XSL将Groovy脚本生成的XML转换为CSV格式求助
解决XML转CSV的XSLT方案
别担心,针对你这个XML结构,写个简单的XSLT就能轻松转换成你要的CSV格式——每个<cell>内容用逗号分隔,空的cell也会保留对应的逗号位置,完全适配你的需求。
下面是专门匹配你XML结构的XSLT代码:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="text" encoding="UTF-8"/> <!-- 输出CSV表头:提取header中column的文本 --> <xsl:template match="/report/header"> <xsl:for-each select="column"> <xsl:value-of select="text()"/> <xsl:if test="position() != last()">,</xsl:if> </xsl:for-each> <xsl:text> </xsl:text> <!-- 换行符 --> </xsl:template> <!-- 处理每一行数据:遍历row下的cell,用逗号分隔内容 --> <xsl:template match="/report/rowset/row"> <xsl:for-each select="cell"> <xsl:value-of select="text()"/> <xsl:if test="position() != last()">,</xsl:if> </xsl:for-each> <xsl:text> </xsl:text> <!-- 换行符 --> </xsl:template> <!-- 忽略XML中的空白文本,避免输出多余空行 --> <xsl:template match="text()"/> </xsl:stylesheet>
代码简单说明:
<xsl:output method="text">指定输出纯文本格式,刚好符合CSV的要求- 表头部分会自动提取
<header>里的列名,用逗号分隔后换行 - 每行数据会遍历对应
<row>下的所有<cell>,空cell会保留逗号位置,每行结束后自动换行 - 最后一个模板用来过滤XML里的冗余空白文本,避免输出多余空行
转换后的CSV示例:
metrics,value Start Time, Sucessful Requests,0 Failed Requests,0 Pending Requests,0 Warning Requests,0 Cancelled Requests,0 Added Docs,0 Deleted Docs,0 Updated Docs,0 Indexed Content Size(byte),0 Token Size(byte),0 Average Latency(seconds), Max Latency(seconds), Documents Indexed Per Second,0 Bytes Indexed Per Second,0
如果你用Groovy脚本的话,也可以直接把这个XSLT集成进去处理,比如用Groovy自带的XSLT处理类运行即可,这个XSLT是通用的,任何标准XSLT处理器都能正常执行。
内容的提问来源于stack exchange,提问作者Daniel Egorov
相关产品推荐
相关产品推荐

