XSLT XML to CSV
本文关键字:CSV to XML XSLT | 更新日期: 2023-09-27 18:15:08
我是XSLT的新手,真的希望有人能帮助我。我从我们的服务器得到一个XML文档,我需要能够将其转换为CSV文件。下面是一个XML文件的例子:
<root>
<DataRow>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
</DataRow>
<DataRow>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
</DataRow>
<DataRow>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
<ColumnName>Value</ColumnName>
</DataRow>
</root>
我需要能够将XML转换为CSV,但我很难创建XSL模板文件,希望有人能帮助我。第一行应该是列名,第二行及之后的行应该是值。在XSLT中有可能创建这样的东西吗?
任何帮助都是非常感激的!
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:for-each select="/root/DataRow[1]/*">
<xsl:if test="position()!=1">
<xsl:value-of select="','"/>
</xsl:if>
<xsl:value-of select="name()"/>
</xsl:for-each>
<xsl:value-of select="'
'"/>
<xsl:for-each select="root/DataRow">
<xsl:for-each select="*">
<xsl:if test="position()!=1">
<xsl:value-of select="','"/>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:value-of select="'
'"/>
</xsl:for-each>
</xsl:template>
</xsl:transform>
试试这个样式表。它使用默认模板和值的嵌套循环
一般情况下,您需要这样做:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:template match="root/DataRow">
<xsl:if test="position() = 2">
<xsl:for-each select="*">
<xsl:if test="position() != 1">
<xsl:value-of select="','"/>
</xsl:if>
<xsl:value-of select="name()"/>
</xsl:for-each>
<xsl:value-of select="'
'"/>
</xsl:if>
<xsl:for-each select="*">
<xsl:if test="position() != 1">
<xsl:value-of select="','"/>
</xsl:if>
<xsl:value-of select="."/>
</xsl:for-each>
<xsl:value-of select="'
'"/>
</xsl:template>
第一个模板是列标题行,列名需要在那里。如果我对它们了解得更多,就会自动确定。如果它们并不是真的都命名为"ColumnName",一个真实的例子会有很大帮助。