2

我正在尝试使用欧洲中央银行 (ECB) http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml的 currentcy 汇率提要

他们提供了有关如何解析 xml 的文档,但没有一个选项对我有用:我检查了 allow_url_fopen=On 是否已设置。

http://www.ecb.int/stats/exchange/eurofxref/html/index.en.html

例如,我使用过,但它没有回显任何内容,而且 $XML 对象似乎始终为空。

<?php
    //This is aPHP(5)script example on how eurofxref-daily.xml can be parsed
    //Read eurofxref-daily.xml file in memory
    //For the next command you will need the config option allow_url_fopen=On (default)
    $XML=simplexml_load_file("http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml");
    //the file is updated daily between 2.15 p.m. and 3.00 p.m. CET

    foreach($XML->Cube->Cube->Cube as $rate){
        //Output the value of 1EUR for a currency code
        echo '1&euro;='.$rate["rate"].' '.$rate["currency"].'<br/>';
        //--------------------------------------------------
        //Here you can add your code for inserting
        //$rate["rate"] and $rate["currency"] into your database
        //--------------------------------------------------
    }
?> 

更新:

由于我在测试环境中处于代理后面,因此我尝试了此操作,但仍然无法读取 XML: function curl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_close ($ch);
返回 curl_exec($ch); }

$address = urlencode($address); 
$data = curl("http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml");  
$XML = simplexml_load_file($data);

var_dump($XML); -> returns boolean false

请帮我。谢谢!

4

2 回答 2

3

我没有找到任何相关的设置php.ini。检查phpinfo()您是否有SimpleXML支持并cURLsupport启用。(你应该同时拥有它们,特别是SimpleXML因为你正在使用它并且它返回 false,它不会抱怨缺少功能。)

代理可能是这里的一个问题。看到这个这个答案。使用cURL可以解决您的问题。


这是这里的另一种选择。

$url = file_get_contents('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
$xml =  new SimpleXMLElement($url) ;

//file put contents - same as fopen, wrote  and close
//need to output "asXML" - simple xml returns an object based upon the raw xml
file_put_contents(dirname(__FILE__)."/loc.xml", $xml->asXML());

foreach($xml->Cube->Cube->Cube as $rate){
  echo '1&euro;='.$rate["rate"].' '.$rate["currency"].'<br/>';
}
于 2012-04-24T08:56:12.650 回答
0

这个解决方案对我有用:

$data = [];

$url = "http://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist-90d.xml";
$xmlRaw = file_get_contents($url);

$doc = new DOMDocument();
$doc->preserveWhiteSpace = FALSE;

$doc->loadXML($xmlRaw);

$node1 = $doc->getElementsByTagName('Cube')->item(0);
foreach ($node1->childNodes as $node2) {
    $value = [];

    foreach ($node2->childNodes as $node3) {
        $value['date'] = $node2->getAttribute('time');
        $value['currency'] = $node3->getAttribute('currency');
        $value['rate'] = $node3->getAttribute('rate');

        $data[] = $value;
        unset($value);
    }
}

echo "<pre"> . print_r($data) . "</pre>";
于 2021-06-27T20:48:35.367 回答