如何提取所有" TickerSymbol"来自外部XML文件的元素,使用PHP?

时间:2017-10-09 09:51:18

标签: php xml

我想从以下外部页面编写一个 PHP脚本来提取所有元素(并且只有自动收报机符号): https://www.predictit.org/api/marketdata/all/

所以在撰写本文时,输出将是

VAGOV17

DEM.VAGOV17

GOP.VAGOV17

NJGOV17

...

我尝试过loadXML()和DOMDocument :: getElementsByTagName()的变体,但不断出现错误。上面页面中的XML看起来很好。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以SimpleXML使用load a remote url

然后你可以使用foreach遍历所有数据。

示例:

$context  = stream_context_create(array('http' => array('header' => 'Accept: application/xml')));
$url = 'https://www.predictit.org/api/marketdata/all/';

$xml = file_get_contents($url, false, $context);
$elements = simplexml_load_string($xml);

foreach ($elements->Markets->MarketData as $marketData) {

    echo $marketData->TickerSymbol . "<br>";

    foreach ($marketData->Contracts->MarketContract as $contract) {
        echo "-" . $contract->TickerSymbol . "<br>";
    }
}

将导致:

VAGOV17
-DEM.VAGOV17
-GOP.VAGOV17
NJGOV17
-DEM.NJGOV17
-GOP.NJGOV17
MAYOR.NYC2017
-BDB.MAYOR.NYC2017
-WEINER.MAYOR.NYC2017
-QUINN.MAYOR.NYC2017
-STRINGER.MAYOR.NYC2017

等。

答案 1 :(得分:-1)

这是您的代码。让我知道工作与否

希望您的xml文件名为&#39; all.xml&#39;

<?php 

if (file_exists('all.xml')) 
{
    $xml = simplexml_load_file('all.xml');

     foreach ($xml as $k)
     {
        $tag =  $k->getName();
        $i = 0;
        foreach($xml->$tag->children() as $key)
        {
            $marketData = $key->getName();

            echo $xml->$tag->MarketData[$i++]->TickerSymbol . "<br>";
        }
     }
}
else
 {
    exit('Failed to open all.xml.');
}