尝试将以下类型的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>
答案 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
</xsl:text>
<xsl:for-each select="observation">
<xsl:value-of select="@date"/>,<xsl:value-of select="@CPIAUCSL_20130208"/>
<xsl:text>
</xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
T:\ftemp>
输出文本的关键是序列化到文件的是结果树的所有文本节点。结果树中的任何元素或属性节点都会被忽略,所以甚至不用去尝试创建它们......只需创建文本节点,它们都会连接到输出中。
为了进入另一个方向,从CSV到XML,我已经免费提供http://www.CraneSoftwrights.com/resources/#csv包(并且它也适用于TSV文件),以便与XSLT 2.0一起使用。