2011-12-25 11 views
0

あなたがクリスマスのために助けることができる場合はワンダー。簡単なxmlはforeachを読む

XMLを読み込もうとしていますが、いくつかの問題があります。基本的にforeach構造では、私が必要とする構造のデータを返すことができません。正しい方法はわかりません。例の下:

`<event id="298640100" date="Sat Dec 31 16:00:00 CET 2011"> 
<market id="9064667" type="1" status="Open" period="FT"> 
<description>Match Betting</description> 
<place_terms>Win only</place_terms> 
− 
<outcome id="6798861400"> 
<description>Draw</description> 
− 
<price id="24532283602"> 
<decimal>3.5</decimal> 
<fractional>5/2</fractional> 
</price> 
<position>2</position> 
</outcome> 
− 
<outcome id="6798861200"> 
<description>Bolton Wanderers</description> 
− 
<price id="24532283402"> 
<decimal>2.0</decimal> 
<fractional>1/1</fractional> 
</price> 
<position>1</position> 
</outcome> 
− 
<outcome id="6798861300"> 
<description>Wolves</description> 
− 
<price id="24532283502"> 
<decimal>3.6</decimal> 
<fractional>13/5</fractional> 
</price> 
<position>3</position> 
</outcome> 
</market> 
</event>` 

PHP

`<?php 
$source = file_get_contents("vc.xml"); 
$xml = simplexml_load_string($source); 
$game = $xml->xpath("//event"); 
foreach ($game as $event) 
{ 
    echo "<b>Event ID:</b> " . $event['id'] . "<br />"; 
    echo "<b>Event Date:</b> " . $event['date'] . "<br />"; 
     { 
      foreach ($event->children() as $market) 
       { 
        if ($market['period'] == 'FT') 
         { 
          foreach ($market->children() as $outcome) 
           { 
            echo "<b>Outcome ID:</b> " . $outcome['id'] . "<br />"; 
            foreach ($outcome->children() as $price) 
            { 
             echo "<b>Price ID:</b> " . $price ['id'] . "<br />"; 
             foreach ($price->children() as $value) 
              { 
               echo "<b>Value:</b> " . $value . "<br />"; 
              } 
            } 
           } 
         } 
       } 
     } 
    echo "<br />"; 
} 
?>` 

これは、基本的にこれを返して:

イベントID:298640100
イベント日付:12月31日(土)午後4時○○分00秒CET 2011
アウトカムID:
結果ID:
結果ID:6798861400
価格ID:
価格ID:24532283602
値:3.5
値:5/2
価格ID:
成果ID:6798861200
価格ID:
価格ID:24532283402
値:2.0
値:1/1
価格ID:
成果ID:6798861300
価格ID:
価格ID:24532283502
値:3.6
値:13/5
価格ID:

イベントID:298640100
イベント日:土12月31日

は、理想的には私はちょうど次を返すようにしたいです16時〇〇分00秒CET 2011
成果ID:6798861400
価格ID:24532283602
値:5/2

私が間違ってやっていることや、これをどのように達成できるかについてのアイデア。事前に

おかげ

リチャード

答えて

-1

を読みたいかもしれません

$xml->event->market->outcome[0] 

は、私はあなたが必要だと思うものです:あなたはあなたのコードの多くを取り除くと、ちょうどこのように直接最初の成果物をつかむことができます。

+0

この度はどうもありがとうございました。この説明に私がこれに追加できる方法はありますか?オッズがドロー、勝ち負けであるかどうかを示すためにもこれを保存したいと思います。例えば。 ボルトン・ワンダラーズ user989952

+0

if($ name!= "price")をif($ name!= "price" && $ name!= "description")に変更すると、説明も同様です。 – Yaniro

2

あなたがここ2つの問題を抱えています。まず、あなたが望む特定のタイプだけでなく、すべての子を返すchildren()関数を使用しています。これが結果IDを得る理由です:初めに3回。 foreach ($market->children() as $outcome)の代わりにforeach ($market->outcome as $outcome)を使用してください。

第2に、最初の結果だけが必要なようです。その場合は、foreachを使用すべきではありません。 simplexmlオブジェクトは配列のセットで、そのインデックス番号で配列内の独立オブジェクトにアクセスできます。あなたは公式のSimpleXMLのドキュメントここhttp://www.php.net/manual/en/simplexml.examples-basic.php