2013-07-26 73 views
1

試圖將以下類型的XML文件轉換爲平面文件或csv。我能夠爲其他XML格式生成XSLT文件,但我不太瞭解如何使用此格式的樹結構。有什麼想法嗎?我已經嘗試了一下,但我對XSLT不夠熟悉。通過XSLT將XML轉換爲平面文件

<observations 
     realtime_start="2013-02-08" 
     realtime_end="2013-02-08" 
     observation_start="1776-07-04" 
     observation_end="9999-12-31" units="lin" 
     output_type="2" 
     file_type="xml" 
     order_by="observation_date" 
     sort_order="asc" 
     count="792" offset="0"   
     limit="100000"> 
    <observation date="1947-01-01" CPIAUCSL_20130208="21.48"/> 
    <observation date="1947-02-01" CPIAUCSL_20130208="21.62"/> 
    <observation date="1947-03-01" CPIAUCSL_20130208="22.0"/> 
    </observations> 
+1

簡單的答案是使用''並輸出任何你需要的文本文件。如果你添加一個你的目標輸出的例子,我肯定有人可以提供更具體的東西。 –

+0

我試圖沿着這些路線工作,但我一直在努力。理想情況下,我想要一個輸出文件,或者只是將xml轉換爲日期和值的字符串。如果我能找到價值,我可以從那裏工作:例如「21.48,21.62,22.0」 –

回答

4

這個例子能滿足嗎?

T:\ftemp>type obs.xml 
<?xml version="1.0" encoding="UTF-8"?> 
    <observations realtime_start="2013-02-08" realtime_end="2013-02-08" 
    observation_start="1776-07-04" observation_end="9999-12-31" units="lin" 
    output_type="2" file_type="xml" order_by="observation_date" sort_order="asc" 
    count="792" offset="0"  limit="100000"> 
    <observation date="1947-01-01" CPIAUCSL_20130208="21.48"/> 
    <observation date="1947-02-01" CPIAUCSL_20130208="21.62"/> 
    <observation date="1947-03-01" CPIAUCSL_20130208="22.0"/> 
    </observations> 

T:\ftemp>xslt obs.xml obs.xsl obs.csv 

T:\ftemp>type obs.csv 
date,CPIAUCSL 
1947-01-01,21.48 
1947-02-01,21.62 
1947-03-01,22.0 

T:\ftemp>type obs.xsl 
<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"> 

<xsl:output method="text"/> 

<xsl:template match="observations"> 
    <xsl:text>date,CPIAUCSL&#xa;</xsl:text> 
    <xsl:for-each select="observation"> 
    <xsl:value-of select="@date"/>,<xsl:value-of select="@CPIAUCSL_20130208"/> 
    <xsl:text>&#xa;</xsl:text> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 
T:\ftemp> 

輸出文本的關鍵是被序列化到文件的是結果樹的所有文本節點。結果樹中的任何元素或屬性節點都會被忽略,所以甚至不會試圖創建它們......只是創建文本節點,並將它們全部連接到輸出中。爲了順從另一個方向,從CSV到XML,我已經使http://www.CraneSoftwrights.com/resources/#csv包免費可用(並且它也適用於TSV文件),以便與XSLT 2.0一起使用。

+1

如果您的值在CSV文件中包含換行符,雙引號或逗號,請記住遵循http://en.wikipedia.org/wiki/Comma-separated_values中描述的規則...這些包含在我的軟件包中,從CSV到XML。 –