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 に移行するために、XSLT 2.0 で使用できるhttp://www.CraneSoftwrights.com/resources/#csvパッケージを自由に利用できるようにしました (TSV ファイルでも機能します)。

于 2013-07-26T18:46:00.277 に答える