XSLT将xml转换为csv,将行转置为列 [英] XSLT convert xml to csv, transposing rows to columns
本文介绍了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
pre>
RUR,17.2,100
USD,12.12,200
EURO,100.2345,3556
我不知道如何进行转置
解决方案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> </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屋!
查看全文