【问题标题】:XSLT convert xml to csv, transposing rows to columnsXSLT 将 xml 转换为 csv,将行转换为列
【发布时间】:2014-07-20 01:14:18
【问题描述】:

我需要使用 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

我不知道如何进行“换位”

【问题讨论】:

标签: xml xslt csv transpose


【解决方案1】:

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

<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>

那么您可以使用以下样式表:

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>

获得:

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

【讨论】:

  • 它只需要格式正确,不一定有效。
  • @IanRoberts 你是对的,但我更喜欢使用“有效”(作为一个非技术术语),因为“格式不正确”与“无效”不具有相同的重力感,并且可能似乎不够重要,以至于非专家发帖者无法认真对待。
  • IMO Stack Overflow 的部分工作是帮助非专家成为专家,如果我们滥用确实具有明确定义含义的术语,我们会破坏这一点正在讨论的技术(对于阅读本文的非专家,只有当文档引用 DTD 并符合其指定的约束时,XML 文档才能“有效”,或者如果符合 XML 模式,则“模式有效”。在没有 DTD 或模式的情况下,“有效”一词没有任何意义)。如果您不想使用准确的术语“格式正确”,那么“语法正确”呢?
  • @IanRoberts 你的观点很强大,但是......“有效”仍然是一个有效的字典词,而且“格式错误”、“格式错误”或“语法正确”都没有像“无效的”。如果你有任何包含“炸弹”、“死亡”或“厄运”的替代品,我可能会被说服。 ;-)
  • “如果你的输入实际上是 XML”(因为如果它的格式不正确,那么它根本就不是 XML,不管它看起来有多像)
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 2017-05-23
  • 2011-10-28
相关资源
最近更新 更多