Возникли проблемы с извлечением данных из XML - PullRequest
0 голосов
/ 10 декабря 2011

Я пытаюсь получить данные из 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

пожалуйста, помогите мне решить эту проблему .. спасибо всем

Ответы [ 4 ]

2 голосов
/ 10 декабря 2011

Ваша проблема в том, что так как match является массивом совпадений, вы не можете использовать $ match ['type'], но должны повторять совпадения следующим образом:

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

Также вам не нужен локон. Если нет причин, вы всегда можете использовать data_is_url, а затем дать элементу SimpleXMLE url!

1 голос
/ 10 декабря 2011

Вы использовали для этого неправильный метод, в общем: -

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

При повторном названии узла (совпадении),
будет отображаться как список объектов (массив),
вы не можете просто использовать $xml->match,
но $xml->match[0], $xml->match[1] ...

Что касается атрибута, вы можете использовать attributes()

в любом случае, если коротко, используйте xpath - более простое решение

0 голосов
/ 10 декабря 2011

Проблема, кажется, здесь:

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

Первое предложение даст вам набор элементов, соответствующих вашему состоянию.Вы не можете просто применить сравнение, как если бы это была простая переменная.Вы должны повторить возвращенные элементы.Или вы должны применить фильтр, чтобы получить только те элементы "match", чей атрибут "type" равен "ODI".

0 голосов
/ 10 декабря 2011

Проблема не в анализе XML, а в проверке $ mthType, в частности, в следующих двух строках:

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

Вы устанавливаете $ mthType как массив, а затем возвращаете его, только если онсоответствует строке, которая никогда не произойдет.Удалите пустые скобки создания массива из первого назначения, и это должно поставить вас на правильный путь.

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