dt250827 2017-04-06 15:01
浏览 108
已采纳

Simplexml_load_file正在使用一个示例,但不与其他示例一起使用

I made a simple website to show actually currency rates from bank website, here is xml from I got these data: http://www.nbp.pl/kursy/xml/LastA.xml. I put this into a code like that:

$xml = simplexml_load_file('http://www.nbp.pl/kursy/xml/LastA.xml');

and get it to variables like that:

<?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)

It works. But if I'd like to get this data from this xml, for example from yesterday: http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05?format=xml, and do the same I have only errors:

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

Line 13:

$xml = simplexml_load_file('http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05');

And other errors:

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

Line 18:

$rate = (string)$xml->Rate[$i]->Mid;

What is difference between these xml's? What am I doing wrong? Could You help me?

  • 写回答

1条回答 默认 最新

  • doumi9661 2017-04-06 15:28
    关注

    Error 1 (invalid xml):

    You're missing the ?format=xml at the end of the URL.

    If you call http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05 (without the format param) through a browser, it seems to default to XML automatically. If you call it through a script, it seems to default to JSON instead.

    So it should work, just by changing

    $xml = simplexml_load_file('http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05');
    

    to

    $xml = simplexml_load_file('http://api.nbp.pl/api/exchangerates/tables/a/2017-04-05?format=xml');
    

    Error 2 (property from non-object):

    The xml looks like this:

    <?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>
                        ....
    

    When you're trying to get the Rate, you're missing the first level node (ExchangeRatesTable).
    Add it and it will work:

    $rate = (string)$xml->ExchangeRatesTable->Rates->Rate[$i]->Mid
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀