如何从XML API中检索特定值?

时间:2016-01-28 21:12:27

标签: xml excel api

我有一个API。

  

http://eve-marketdata.com/api/item_history2.xml?char_name=demo&region_ids=10000002&type_ids=33468&days=2

我只想要"音量"值。

在Excel 2013中,我使用了

=FILTERXML(WEBSERVICE(API ADDRESS),"//row/@volume")

但我收到#VALUE!错误。

有人能指出我做错了吗?

问题:

当我把这个公式放在:

=FILTERXML(WEBSERVICE("http://eve-marketdata.com/api/item_history2.xml?char_name=demo&region_ids=10000002&type_ids=33468&days=2"), "//emd/result/rowset/row/@volume")

我得到了#VALUES!我认为问题来自于webservice函数本身,因为当我输入这个公式时:

=WEBSERVICE(http://eve-marketdata.com/api/item_history2.xml?char_name=demo&region_ids=10000002&type_ids=33468&days=2)

我也得到了#VALUE!你知道问题是什么吗?

1 个答案:

答案 0 :(得分:1)

您需要微调您的Xpath查询。看一下Web服务返回的XML:

<?xml version="1.0" encoding="utf-8"?>
<emd version="2">
    <currentTime>2016-01-29 13:37:47</currentTime>
    <result>
        <rowset name="history" key="typeID,regionID,date" columns="typeID,regionID,date,lowPrice,highPrice,avgPrice,volume,orders">
            <row typeID="33468" regionID="10000002" date="2016-01-28" lowPrice="74500000.06" highPrice="76300002.15" avgPrice="76248999.69" volume="279" orders="219"/>
            <row typeID="33468" regionID="10000002" date="2016-01-29" lowPrice="74000000.89" highPrice="80449888.7" avgPrice="75000104.61" volume="101" orders="68"/>
        </rowset>
    </result>
</emd>

您的Xpath查询需要在完整路径中将您从文档的根目录转移到您感兴趣的值,因此您需要:

//emd/result/rowset/row/@volume

总而言之,你的公式应该是:

=FILTERXML(WEBSERVICE("http://eve-marketdata.com/api/item_history2.xml?char_name=demo&region_ids=10000002&type_ids=33468&days=2"), "//emd/result/rowset/row/@volume")

它给出了279的结果 - 因为它只取第一个值。

要获取这两个值,您需要多次调用FILTERXML函数,并调整Xpath以将其考虑在内。如果你这样做,我建议将WEBSERVICE的呼叫转移到它自己的小区。

因此,您的最终结果可能类似于:

=WEBSERVICE("http://eve-marketdata.com/api/item_history2.xml?char_name=demo&region_ids=10000002&type_ids=33468&days=2")
=FILTERXML(A1, "//emd/result/rowset/row[position()=1]/@volume")
=FILTERXML(A1, "//emd/result/rowset/row[position()=2]/@volume")

请注意position()由于某种原因从1开始计数。