如何在PHP中正确解析带命名空间的XML并获取EUR-USD汇率数据
PHP实现获取EUR-USD汇率解决方案
问题根源
你遇到的带冒号标签属于XML命名空间标识,ECB提供的汇率XML文件使用了多命名空间定义,普通的SimpleXML属性读取方式无法直接获取到汇率所在的Cube节点。
可直接运行的完整代码
<?php ini_set('default_charset', 'UTF-8'); // ECB汇率接口地址 $url = "https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml?5105e8233f9433cf70ac379d6ccc5775"; $xml = simplexml_load_file($url); // 获取XML中所有注册的命名空间 $namespaces = $xml->getNamespaces(true); // 读取默认命名空间下的Cube节点树 $cubeRoot = $xml->children($namespaces[''])->Cube->Cube; $usdRate = null; // 遍历所有货币汇率节点 foreach ($cubeRoot->Cube as $node) { if ((string)$node['currency'] === 'USD') { $usdRate = (float)$node['rate']; break; } } if ($usdRate) { echo "当前欧元兑美元(EUR-USD)汇率为:" . $usdRate; } else { echo "获取美元汇率失败,请检查接口可用性"; } ?>
代码说明
- 运行前请确认PHP配置文件中
allow_url_fopen配置项为On,否则无法直接读取远程XML文件 getNamespaces(true)方法会返回XML内所有注册的命名空间,索引为空字符串的项就是汇率数据所在的默认命名空间- 节点层级关系:默认命名空间下第一层
Cube是根容器,第二层Cube带汇率更新日期属性,第三层Cube就是每个货币对应的汇率数据,直接读取currency和rate属性即可拿到对应值
内容的提问来源于stack exchange,提问作者anon6720
相关产品推荐
相关产品推荐

