2011-12-09 12 views
0

xmlからデータを取得しようとしていますが、問題があります。xmlからデータを抽出するのに問題がある

私は、単純なコードを作成する必要がありますが、私は彼らがうまくいっているとは思わない...

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

として

<?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; 
     } 

    } 
?> 

と呼び出しが、私は結果を取得することができません。

この問題を解決するのを手伝ってください。私はこれを解決するために私を助けてくださいhttp://www.hamariweb.com/

enter image description here

のようなものを作るしようとしています..あなたに問題があなたのXML解析ではなく、すべての

+0

正確な問題は何ですか? 「結果を取得できません」という質問は特定の質問ではありません。 – jli

+0

このスクリプトを実行してみてください..タイプ== ODIの場合に条件を適用して一致の説明を抽出しますが、スクリプトは最初のタイプのみをチェックして再度実行しません。私もforeachループを試しました:( – Muzammil

+0

curlの代わりにdata_is_urlフラグを使ってみましたか?xmlを取得するために '$ xml = new SimpleXMLElement($ url、0、true);'を試してください – Sgoettschkes

答えて

-1

に感謝し、それは特にこれらの、あなたの$ mthTypeチェックします

$ mthTypeを配列として設定していて、決してそれが起こらない文字列と一致する場合にのみそれを返します。最初の割り当てから空の配列作成括弧を削除すると、正しいトラックに置かれます。

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

申し訳ありません、同じ方法を試してみてください...しかし同じ応答:( – Muzammil

+0

SimpleXMLの結果を扱うときに明示的に(文字列)データ型を与えなければならない場合があります:$ mthType =(string)$ xml-> match ['他の答えで示唆されているように、xpathを使用してください。 –

0

問題はここにあると思われる:

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

最初の文は、あなたの条件に合致する要素のセットを提供します。 単純な変数であるかのように比較を適用することはできません。返された要素を反復処理する必要があります。または、フィルタを適用して、属性 "type"が "ODI"である要素 "match"を取得する必要があります。

1

あなたは、一般的には、このために間違った方法を使用しています -

ノード名(一致)が繰り返され
$found = $xml->xpath("//match[@type='ODI']"); 
// is an array of collection that with node name is match, and attribute type=ODI 

は、
それはオブジェクトのリスト(配列)としてレンダリングされます、
のことができます。 「トンはちょうどあなたがattributes()

を使用することができ、属性のよう $xml->match
しかし $xml->match[0], $xml->match[1] ...

を使用します

とにかく、長い話を短く、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を渡すことができます。

関連する問題