Xml 如何使用xsl生成接近csv的格式?
我有以下xsl文件来生成csv格式的cd数据:Xml 如何使用xsl生成接近csv的格式?,xml,xslt,Xml,Xslt,我有以下xsl文件来生成csv格式的cd数据: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/catalog"> <xsl:for-each select="cd"> <xsl:ap
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/catalog">
<xsl:for-each select="cd">
<xsl:apply-templates/>
<xsl:if test="position() = last()"><xsl:value-of select="./child::*"/>, </xsl:if>
<xsl:if test="position() = last()"><xsl:value-of select="./child::year"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
,
;
以下是示例数据:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<cd>
<title>Red</title>
<artist>The Communards</artist>
<country>UK</country>
<company>London</company>
<price>7.80</price>
<year>1987</year>
</cd>
<cd>
<title>Unchain my heart</title>
<artist>Joe Cocker</artist>
<country>USA</country>
<company>EMI</company>
<price>8.20</price>
<year>1987</year>
</cd>
</catalog>
红色
公社
英国
伦敦
7.80
1987
释放我心
乔·库克
美国
电磁干扰
8.20
1987
每次在oxygen上运行程序时,我都会得到一个糟糕的格式:如何调整输出以生成csv格式?对于csv输出,您需要在XSLT中指定
。如果要查找包含
的所有子元素的逗号
分隔值的输出,可以使用以下任一方法
XSLT1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:template match="cd">
<xsl:for-each select="*">
<xsl:value-of select="." />
<xsl:if test="position() != last()" >
<xsl:text>, </xsl:text>
</xsl:if>
<xsl:if test="position() = last()" >
<xsl:text>
</xsl:text>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
如果您想要像CSV一样的文本输出,我将首先使用
。除此之外,还不清楚您希望输入的确切结果是什么,并且,鉴于您提到了氧气,为什么您将自己限制为XSLT 1,而带有xsl:value of select=“*”separator=“,”
的XSLT 2有一条简洁的指令,可以使用特定的分隔符输出项目。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:template match="cd">
<xsl:value-of select="*" separator=", " />
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
Red, The Communards, UK, London, 7.80, 1987
Unchain my heart, Joe Cocker, USA, EMI, 8.20, 1987