XSLT将xml转换为csv,将行转置为列 [英] XSLT convert xml to csv, transposing rows to columns

查看:348
本文介绍了XSLT将xml转换为csv,将行转置为列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要使用XSLT从XML生成CSV文本输出



我的XML

 < Row> 
< cell> Currecy< / cell>
< cell> RUR< / cell>
< cell> USD< / cell>
< cell> EURO< / cell>
< / Row>
< Row>
< cell> Param< / cell>
< cell> 17.2< / cell>
< cell> 12.12< / cell>
< cell> 100.2345< / cell>
< / Row>
< Row>
< cell> Param1< / cell>
< cell> 100< / cell>
< cell> 200< / cell>
< cell> 3556< / cell>
< / Row>

输出格式CSV

  Cur Param,Param1 
RUR,17.2,100
USD,12.12,200
EURO,100.2345,3556
pre>

我不知道如何进行转置

解决方案

p>如果您有有效 XML输入,例如:

 < Rows& 
< Row>
< cell>货币< / cell>
< cell> RUR< / cell>
< cell> USD< / cell>
< cell> EURO< / cell>
< / Row>
< Row>
< cell> Param< / cell>
< cell> 17.2< / cell>
< cell> 12.12< / cell>
< cell> 100.2345< / cell>
< / Row>
< Row>
< cell> Param1< / cell>
< cell> 100< / cell>
< cell> 200< / cell>
< cell> 3556< / cell>
< / Row>
< / Rows>

那么你可以使用下面的样式表:



XSLT 1.0

 < xsl:stylesheet version =1.0
xmlns :xsl =http://www.w3.org/1999/XSL/Transform>
< xsl:output method =textencoding =UTF-8/>

< xsl:template match =/>
< xsl:for-each select =Rows / Row [1] / cell>
< xsl:variable name =iselect =position()/>
< xsl:for-each select =/ Rows / Row>
< xsl:value-of select =cell [$ i]/>
< xsl:if test =position()!= last()>
< xsl:text>,< / xsl:text>
< / xsl:if>
< / xsl:for-each>
< xsl:if test =position()!= last()>
< xsl:text>&#10;< / xsl:text>
< / xsl:if>
< / xsl:for-each>
< / xsl:template>

< / xsl:stylesheet>

可获取:

  Currency,Param,Param1 
RUR,17.2100
USD,12.12,200
EURO,100.2345,3556


I needed to use XSLT to generate CSV text output from XML

my XML

<Row> 
<cell>Currecy</cell>
<cell>RUR</cell>
<cell>USD</cell>
<cell>EURO</cell>
</Row> 
<Row> 
<cell>Param</cell>
<cell>17.2</cell>
<cell>12.12</cell>
<cell>100.2345</cell>
</Row> 
<Row> 
<cell>Param1</cell>
<cell>100</cell>
<cell>200</cell>
<cell>3556</cell>
</Row> 

output format CSV

Cur Param,  Param1
RUR, 17.2,  100     
USD, 12.12,  200
EURO, 100.2345, 3556

I do not know how to make a "transposition"

解决方案

If you had a valid XML input such as:

<Rows>
    <Row> 
        <cell>Currency</cell>
        <cell>RUR</cell>
        <cell>USD</cell>
        <cell>EURO</cell>
    </Row> 
    <Row> 
        <cell>Param</cell>
        <cell>17.2</cell>
        <cell>12.12</cell>
        <cell>100.2345</cell>
    </Row> 
    <Row> 
        <cell>Param1</cell>
        <cell>100</cell>
        <cell>200</cell>
        <cell>3556</cell>
    </Row> 
</Rows>

then you could use the following stylesheet:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/">
        <xsl:for-each select="Rows/Row[1]/cell">
            <xsl:variable name="i" select="position()" />
                <xsl:for-each select="/Rows/Row">
                    <xsl:value-of select="cell[$i]"/>
                    <xsl:if test="position()!=last()">
                        <xsl:text>,</xsl:text>
                    </xsl:if>
                </xsl:for-each>
            <xsl:if test="position()!=last()">
                <xsl:text>&#10;</xsl:text>
            </xsl:if>
        </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

to obtain:

Currency,Param,Param1
RUR,17.2,100
USD,12.12,200
EURO,100.2345,3556

这篇关于XSLT将xml转换为csv,将行转置为列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆