简单的PHP XML解析器

时间:2015-01-23 20:02:09

标签: php xml parsing

我是PHP的新手,所以如果可能需要一些帮助,它可能是一个非常简单的答案,但我正在努力解决它。

我试图从William Hill XML Feed中获取一些数据。

我想退出:

  • 竞争
  • 参赛队伍
  • 开球时间
  • 第1队+赔率
  • Draw +赔率
  • Team 2 +赔率

以下是XML Feed的链接 - http://cachepricefeeds.williamhill.com/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=1&marketSort=MR&filterBIR=N

到目前为止,我有下面的代码,它不会提取我需要的所有数据,而且它只会带回一个灯具。

<?php 

$xml = simplexml_load_file('http://cachepricefeeds.williamhill.com/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=1&marketSort=MR&filterBIR=N');


$data = $xml->response->williamhill->class->type->market;
$ps = $data->participant;
foreach($ps as $p)
{
echo $p['name']." - ".$p['odds']."<br />";
}

?>

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

已更新

    <?php

$xml = simplexml_load_file('http://cachepricefeeds.williamhill.com/openbet_cdn?action=template&template=getHierarchyByMarketType&classId=1&marketSort=MR&filterBIR=N');


$data = $xml->response->williamhill->class->type;

foreach($data as $type) {
    foreach($type->market as $market) {
        if(strpos($market['name'], "Match Betting")) {
            echo $market['name'] . "<br/>";
            $competition = $type['name'];
            $kickoff = $market['time'];
            $date = $market['date'];
            $ps = $market->participant;

            echo "Competition: " . $competition . "<br/>";
            echo "Kickoff: " . $kickoff . "<br/>";
            echo "Date: " . $date . "<br/>";

    foreach($ps as $p) {
        echo $p['name']." - ".$p['odds']."<br />";
    }

    echo "<br><br/>";
        }
    }

}

?>

它只获得一个条目的原因是因为你没有遍历每个市场,它只会选择第一个市场并循环通过第一个市场。您需要添加一个额外的循环才能将每个条目打印到屏幕上,因为列出了多个type

答案 1 :(得分:0)

Simplexml对象不是数组,一开始可能会令人困惑。将对象转换为数组并且更容易处理:

var_dump((array) $xml->response->williamhill->class->type->market));

这可以在结构中的任何一点完成。请注意,属性存储在@attributes键下。