我创建了一个简单的网站来显示银行网站的货币汇率,这里是xml,我得到了这些数据:http://www.nbp.pl/kursy/xml/LastA.xml。我把它放到这样的代码中:
$xml = simplexml_load_file('http://www.nbp.pl/kursy/xml/LastA.xml');
并将其转换为类似的变量:
<?php
for($i=0; $i<35; $i++){
$rate = (string)$xml->pozycja[$i]->kurs_sredni;
$name = (string)$xml->pozycja[$i]->nazwa_waluty;
$code = (string)$xml->pozycja[$i]->kod_waluty;
(echo here)
有效。但是如果我想从这个xml中获取这些数据,例如从昨天开始:http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05?format=xml,并且做同样的事情我只有错误:
Warning: simplexml_load_file(): http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05:1: parser error : Start tag expected, '<' not found in [PATH] on line 13
第13行:
$xml = simplexml_load_file('http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05');
还有其他错误:
Warning: simplexml_load_file(): [{"table":"A","no":"067/A/NBP/2017","effectiveDate":"2017-04-05","rates":[{"curr in [PATH] on line 13
Warning: simplexml_load_file(): ^ in [PATH] on line 13
Notice: Trying to get property of non-object in [PATH] on line 18
第18行:
$rate = (string)$xml->Rate[$i]->Mid;
这些xml有什么区别?我究竟做错了什么?你能帮帮我吗?
答案 0 :(得分:0)
您错过了网址末尾的?format=xml
。
如果您通过浏览器调用http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05
(没有format
参数),它似乎会自动默认为XML。如果你通过脚本调用它,它似乎默认为JSON。
所以它应该可行,只需更改
即可$xml = simplexml_load_file('http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05');
到
$xml = simplexml_load_file('http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05?format=xml');
xml看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfExchangeRatesTable xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ExchangeRatesTable>
<Table>A</Table>
<No>067/A/NBP/2017</No>
<EffectiveDate>2017-04-05</EffectiveDate>
<Rates>
<Rate>
<Currency>bat (Tajlandia)</Currency>
<Code>THB</Code>
<Mid>0.1151</Mid>
</Rate>
<Rate>
....
当您尝试获取费率时,您错过了第一级节点(ExchangeRatesTable
)。
添加它,它将起作用:
$rate = (string)$xml->ExchangeRatesTable->Rates->Rate[$i]->Mid