1

尝试将以下类型的 XML 文件转换为平面文件或 csv。我能够为其他 XML 格式生成 XSLT 文件,但我并不真正了解如何使用这种格式的树结构。有什么想法吗?我进行了一些实验,但我对 XSLT 还不够熟悉。

  <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>
4

1 回答 1

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 一起使用。

于 2013-07-26T18:46:00.277 回答