xml多级到csv使用xslt

时间:2014-07-10 16:56:35

标签: xml xslt csv parent-child

我有这样的XML:

 <PROGRAM>
    <date>10/07/2014</date>
    <name>Name</name>
    <LOTS>
        <LOT>
            <ID>1</ID>
            <type>A</type>
        </LOT>
        <LOT>
            <ID>2</ID>
            <type>B</type>
        </LOT>
</PROGRAM>

我想从转换(XSLT)结果中得到这个结果:

10/07 / 2014,姓名,1,A
10月7日/ 2014,名称,2,B

这是我的xslt:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="text"/>
    <xsl:variable name='newline'>
        <xsl:text></xsl:text>
    </xsl:variable>

<xsl:template match="/">
        <xsl:for-each select="//LOT">
            <xsl:for-each select="//PROGRAM">
                <xsl:value-of select="concat(date,',',name)"/>
            </xsl:for-each>
            <xsl:value-of select="concat(',',ID,',',type,$newline)"/>
        </xsl:for-each>
</xsl:template>

有没有人知道实现这个的XSLT?

谢谢!

1 个答案:

答案 0 :(得分: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="PROGRAM/LOTS/LOT">
            <xsl:value-of select="concat(../../date, ',', ../../name, ',', ID, ',', type)"/>
            <xsl:if test="position()!=last()">
                <xsl:text>&#10;</xsl:text>
            </xsl:if>
        </xsl:for-each>
</xsl:template>

</xsl:stylesheet>