这与之前的帖子有关。我试图将经济数据从StLouisFred导入Access。我最终将这个数据库用于excel。我是学生,这项任务虽然简单,但却超出了我的经验。我还尝试将XML数据导入Excel,但格式仍然是一个问题。我知道FRED使用CSV,但你不能自动更新CSV,所以我想使用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>
我正在尝试将数据转换为Access更喜欢的其他标准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 </date>
<value> 21.48 </value>
<observation/>
<observation>
<date>1947-02-01</date>
<value>21.62</value>
</observation>
<observation>
<date>1947-03-01</date> <value>22.0</value>
</observation>
</observations>
这似乎有用。 Access能够使用样式表,我很乐意尝试,但我需要一些细微的演练。因此,假设我有一张第一个xml格式的信息。有没有办法让我将数据转换为Access,以便我可以有一个自动更新的表,或者这是一个绝望的项目?
答案 0 :(得分:2)
这是一个简单的XSLT转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="observation/@date">
<date><xsl:value-of select="."/></date>
</xsl:template>
<xsl:template match="observation/@*[starts-with(name(),'CPIAUCSL_')]">
<value><xsl:value-of select="."/></value>
</xsl:template>
</xsl:stylesheet>
并且在提供的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>
产生了想要的正确结果:
<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</date>
<value>21.48</value>
</observation>
<observation>
<date>1947-02-01</date>
<value>21.62</value>
</observation>
<observation>
<date>1947-03-01</date>
<value>22.0</value>
</observation>
</observations>