使用 xsl将 XML 文件转换为 CSV



我有一个Groovy脚本,在系统中进行一些查询,结果我得到了一个XML文件,但是对于进一步的工作,我需要将其转换为csv。不幸的是,我正在使用 xsl,并且我尝试应用不同的发现示例,它们都在执行结果,这是不可接受的。

这是我的 XML:

<?xml version="1.0" encoding="UTF-8"?>
<report title="Indexing Metrics">
    <header>
        <column type="text">metrics</column>
        <column type="text">value</column>
    </header>
    <rowset>
        <row>
            <cell>Start Time</cell>
            <cell />
        </row>
        <row>
            <cell>Sucessful Requests</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Failed Requests</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Pending Requests</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Warning Requests</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Cancelled Requests</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Added Docs</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Deleted Docs</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Updated Docs</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Indexed Content Size(byte)</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Token Size(byte)</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Average Latency(seconds)</cell>
            <cell />
        </row>
        <row>
            <cell>Max Latency(seconds)</cell>
            <cell />
        </row>
        <row>
            <cell>Documents Indexed Per Second</cell>
            <cell>0</cell>
        </row>
        <row>
            <cell>Bytes Indexed Per Second</cell>
            <cell>0</cell>
        </row>
    </rowset>
</report>

我只需要所有用逗号分隔的单元格,没什么特别的。请帮忙!

您可以尝试使用以下 XSLT。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:template match="report">
        <xsl:for-each select="header/column">
            <xsl:value-of select="." />
            <xsl:if test="position() != last()">
                <xsl:value-of select="','" />
            </xsl:if>
        </xsl:for-each>
        <xsl:for-each select="rowset/row">
            <xsl:text>&#xD;</xsl:text>
            <xsl:for-each select="cell">
                <xsl:value-of select="." />
                <xsl:if test="position() != last()">
                    <xsl:value-of select="','" />
                </xsl:if>
            </xsl:for-each>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

这将产生以下输出

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

最新更新