2011-12-09 110 views
0

我想从xml获取数据,但遇到问题。无法从xml提取数据

我已创建简单的代码,但我不认为他们会好..

<?php 
    $cricapi = 'http://synd.cricbuzz.com/j2me/1.0/livematches.xml'; 

    function followers($url) { 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     $data = curl_exec($ch); 
     curl_close($ch); 

     $xml = new SimpleXMLElement($data); 
     $mthType = $xml->match['type']; 
     if ($mthType == "ODI") 
     { 
      $match = $xml->match['mchDesc']; 
      return $match; 
     } 

    } 
?> 

,并呼吁为

<?php echo $match = followers($cricapi); ?> 

,但我无法获取结果。

请帮我解决这个问题。我试图做一个类似http://www.hamariweb.com/

enter image description here

请帮我解决这个问题..谢谢大家

+0

确切的问题是什么? “但我无法取得结果”不是一个具体问题。 – jli

+0

请尝试运行此脚本..我应用条件,如果类型== ODI然后提取匹配说明,但该脚本只检查第一种类型,不要再运行..即使我尝试foreach循环:( – Muzammil

+0

)你尝试使用data_is_url标志而不是curl吗?尝试'$ xml = new SimpleXMLElement($ url,0,true);'只用于检索xml。 – Sgoettschkes

回答

-1

的问题不在于你的XML解析,它与你的$ mthType检查,特别是这些两行:

$mthType[] = $xml->match['type']; 
if ($mthType == "ODI") 

你设置$ mthType了一个数组,然后只有当它的字符串,这将永远不会发生匹配返回它。从第一个作业中删除空的数组创建括号,这应该使你走上正确的轨道。

$mthType = $xml->match['type']; 
if ($mthType == "ODI") 
+0

对不起,我错误地输入了,但是我也尝试这种方式tooo ..但同样的回应:( – Muzammil

+0

有时你必须显式地给(字符串)数据类型在处理SimpleXML的结果时试试这行:$ mthType =(string)$ xml-> match ['键入'];或者,在另一个答案中使用xpath,这将是首选的 –

0

这个问题似乎是在这里:

$mthType[] = $xml->match['type']; 
if ($mthType == "ODI") { 
    ... 
} 

第一句会给你一套符合条件的元素。 你不能仅仅应用一个比较就好像它是一个简单的变量。你应该迭代返回的元素。或者你应该应用一个过滤器来获得那些属性“type”是“ODI”的元素“匹配”。

1

您已经使用了这种错误的方法,一般来说: -

$found = $xml->xpath("//match[@type='ODI']"); 
// is an array of collection that with node name is match, and attribute type=ODI 

当有重复的节点名称(匹配),
它会呈现为对象列表(阵列),
可以“T只使用$xml->match
$xml->match[0], $xml->match[1] ...

为属性,你可以使用attributes()

无论如何,长话短说,使用xpath是简单的解决方案

+0

我没有清楚的理解..你可以请描述一下 – Muzammil

+0

已经解释了,我建议你先做一些阅读 – ajreal

+0

谢谢非常多..:D – Muzammil

2

你的问题是,比赛是比赛的一个数组,你不能使用$匹配[“型”],但必须遍历这样的比赛:

function followers($url) { 
    $xml = new SimpleXMLElement($url,1,true); 
    foreach($xml->match AS $match){ 
    if($match['type']== "ODI"){ 
     echo $match['mchDesc']; 
    } 
    } 
} 

你也不需要卷曲。如果没有理由,你可以随时使用data_is_url,然后给SimpleXMLElement的URL!