2012-03-29 77 views
0

我有以下XSLT,從生成XML的結果,現在我需要稍微修改它來設置CSV結果。有什麼建議麼。簡單的XSLT修改XML到CSV

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:key name="mon" match="Column[substring(@name, 4, 1) = '_']"  use="concat(parent::*/@rowNum, substring(@name, 1, 3))"/> 
<xsl:output indent="yes"/> 
<xsl:template match="node()"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
     <xsl:apply-templates select="node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="DataSet"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
     <xsl:for-each select="*/Column[generate-id() = generate-id(key('mon', concat(parent::*/@rowNum, substring(@name, 1, 3)))[1])]"> 
      <xsl:element name="{name(parent::*)}"> 
       <xsl:attribute name="rowNum"> 
        <xsl:value-of select="position()"/> 
       </xsl:attribute> 
       <xsl:attribute name="mon"> 
        <xsl:value-of select="@name"/> 
       </xsl:attribute> 
       <xsl:copy-of select="parent::*/Column[not(substring(@name, 4, 1) = '_')]"/> 
       <xsl:copy-of select="key('mon', concat(parent::*/@rowNum, substring(@name, 1, 3)))"/> 
      </xsl:element> 
     </xsl:for-each> 
    </xsl:copy> 
</xsl:template> 

回答

1

沒有關於源文件的信息,這隻能是胡亂猜測,但東西這樣的:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:key name="mon" match="Column[substring(@name, 4, 1) = '_']"  use="concat(parent::*/@rowNum, substring(@name, 1, 3))"/> 
<xsl:output method="text"/> 

<xsl:template match="DataSet/*"> 
    <xsl:text>&#10;</xsl:text> 
</xsl:template> 

<xsl:template match="DataSet"> 
<xsl:for-each select="*/Column[generate-id() = generate-id(key('mon', concat(parent::*/@rowNum, substring(@name, 1, 3)))[1])]"> 
    <xsl:value-of select="name(parent::*)"/> 
    <xsl:text>, </xsl:text> 
    <xsl:value-of select="position()"/> 
    <xsl:text>, </xsl:text> 
    <xsl:value-of select="@name"/> 
    <xsl:text>, </xsl:text> 
    <xsl:value-of select="parent::*/Column[not(substring(@name, 4, 1) = '_')]"/> 
    <xsl:text>, </xsl:text> 
    <xsl:value-of select="key('mon', concat(parent::*/@rowNum, substring(@name, 1, 3)))"/> 
</xsl:for-each> 
</xsl:template> 
</xsl:stylesheet>