如何使用xslt将xml元素的xml数据转换为csv?

时间:2015-01-21 05:41:48

标签: xml csv xslt

我的XML包含其他XML作为元素之一的数据 我需要使用XMLCSV元素数据转换为XSLT

这是我的XML

<?xml version="1.0" encoding="ISO-8859-1"?>
 <products>
   <details>
      <?xml version="1.0" encoding="ISO-8859-1"?>
       <catalog>
        <cd>
        <title>Empire Burlesque</title>
        <artist>Bob Dylan</artist>
        <country>USA</country>
        <company>Columbia</company>
        <price>10.90</price>
        <year>1985</year>
       </cd>
        <cd>
        <title>Hide your heart</title>
        <artist>Bonnie Tyler</artist>
        <country>UK</country>
        <company>CBS Records</company>
        <price>9.90</price>
        <year>1988</year>
      </cd>
      <cd>
        <title>Greatest Hits</title>
        <artist>Dolly Parton</artist>
        <country>USA</country>
        <company>RCA</company>
        <price>9.90</price>
        <year>1982</year>
        </cd>
    </catalog> 
   </details>
</products>

在此我需要将<details>的数据转换为CSV

1 个答案:

答案 0 :(得分:0)

假设每个<cd>数据代表csv文件中的单个数据行,请尝试此操作,

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" exclude-result-prefixes="xsl">
  <xsl:output method="text"/>
  <xsl:template match="/*">
    <xsl:for-each select="details/catalog/cd">
      <xsl:for-each select="*">
        <xsl:value-of select="."/>
        <xsl:variable name="countNode" select="count(../*)"/>
        <xsl:choose>
          <xsl:when test="position()=$countNode">
            <xsl:text>&#xa;</xsl:text>
          </xsl:when>
          <xsl:otherwise>,</xsl:otherwise>
        </xsl:choose>
      </xsl:for-each>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

结果数据如何显示

Empire Burlesque,Bob Dylan,USA,Columbia,10.90,1985
Hide your heart,Bonnie Tyler,UK,CBS Records,9.90,1988
Greatest Hits,Dolly Parton,USA,RCA,9.90,1982