转换Yahoo Finance Currency XML以便使用XSLT导入Access

时间:2017-01-20 19:47:02

标签: xml vba ms-access xslt

我正在尝试创建一个XSLT文件,我可以使用该文件在http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format正确导入Yahoo所有货币Feed。 我想最终将它构建到VBA中以自动导入。

xml 文件如下所示(但还有更多货币):

<list version="1.0">
<meta>
    <type>resource-list</type>
</meta>
<resources start="0" count="174">
    <resource classname="Quote">
        <field name="name">USD/KRW</field>
        <field name="price">1174.170044</field>
        <field name="symbol">KRW=X</field>
        <field name="ts">1484857724</field>
        <field name="type">currency</field>
        <field name="utctime">2017-01-19T20:28:44+0000</field>
        <field name="volume">0</field>
    </resource><resource classname="Quote">
        <field name="name">SILVER 1 OZ 999 NY</field>
        <field name="price">0.053778</field>
        <field name="symbol">XAG=X</field>
        <field name="ts">1484857681</field>
        <field name="type">currency</field>
        <field name="utctime">2017-01-19T20:28:01+0000</field>
        <field name="volume">36</field>
    </resource></resources>
</list>
<!-- iapi4.finance.bf1.yahoo.com Thu Jan 19 15:30:54 EST 2017 -->

我尝试过创建一个XSLT文件,但我认为这是完全错误的。我看了一些不同的例子,但我无法弄清楚如何为提供的文件进行自定义。我相信很多用户会对使用这个文件感兴趣,并且可以为许多不同的人重新使用它。

2 个答案:

答案 0 :(得分:2)

从Parfait的优秀答案here无耻地窃取,我想出了XSLT文件

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="list">
    <xsl:apply-templates select="@*|node()"/>
  </xsl:template>

  <xsl:template match="meta">
    <!-- omit -->
  </xsl:template>

  <xsl:template match="resource">
    <xsl:copy>
      <xsl:for-each select="*">
        <xsl:if test="@*">
            <xsl:element name="{@*}"><xsl:value-of select="."/></xsl:element>
          </xsl:if>
      </xsl:for-each>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

将源XML文件转换为

<?xml version="1.0" encoding="UTF-16"?>
<resources start="0" count="174">
    <resource>
        <name>USD/KRW</name>
        <price>1174.170044</price>
        <symbol>KRW=X</symbol>
        <ts>1484857724</ts>
        <type>currency</type>
        <utctime>2017-01-19T20:28:44+0000</utctime>
        <volume>0</volume>
    </resource>
    <resource>
        <name>SILVER 1 OZ 999 NY</name>
        <price>0.053778</price>
        <symbol>XAG=X</symbol>
        <ts>1484857681</ts>
        <type>currency</type>
        <utctime>2017-01-19T20:28:01+0000</utctime>
        <volume>36</volume>
    </resource>
</resources>
<!-- iapi4.finance.bf1.yahoo.com Thu Jan 19 15:30:54 EST 2017 -->

哪个Access可以导入名为[resource]的表。

答案 1 :(得分:0)

打开宏录制器并转到数据&gt;来自网络&gt;导入您在上面发布的链接。我刚刚那样做了,并得到了下面的代码。

Sub Macro1()

    ActiveWorkbook.XmlImport URL:= _
        "http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format", _
        ImportMap:=Nothing, Overwrite:=True, Destination:=Range("$A$1")
End Sub

这是最终结果。

enter image description here