1

xpath と XML の使用に問題があります

これは XML ファイルの例です

    <OddService>
    <Header>
    <Status>000</Status>
    <Description>OK</Description>
    <Timestamp>1352407434</Timestamp>
    </Header>
    <Results>
    <Event>
    <EventID>1182745</EventID>
    <StartDate>2012-11-09T19:45:00</StartDate>
    <SportID>6046</SportID>
    <LeagueID>1182547</LeagueID>
    <LocationID>243</LocationID>
    <Status>NSY</Status>
    <LastUpdate>2012-11-08T20:27:14.767</LastUpdate>
    <HomeTeam ID="7" Name="Middlesbrough" Logo=""/>
    <AwayTeam ID="992" Name="Sheffield W" Logo=""/>
    <Scores status="" time=""/>
    <Scorers/>
    <Cards/>
    <Outcomes>...</Outcomes>
    </Event>
    <OddService>
    <Header>
    <Status>000</Status>
    <Description>OK</Description>
    <Timestamp>1352407434</Timestamp>
    </Header>
    <Results>
    <Event>
    <EventID>1182745</EventID>
    <StartDate>2012-11-09T19:45:00</StartDate>
    <SportID>6046</SportID>
    <LeagueID>1182547</LeagueID>
    <LocationID>243</LocationID>
    <Status>NSY</Status>
    <LastUpdate>2012-11-08T20:27:14.767</LastUpdate>
    <HomeTeam ID="7" Name="Middlesbrough" Logo=""/>
    <AwayTeam ID="992" Name="Sheffield W" Logo=""/>
    <Scores status="" time=""/>
    <Scorers/>
    <Cards/>
    <Outcomes>...</Outcomes>
    </Event>
    </Results>
    </OddService>

この XML の例では、エントリを 1 つだけ含めました。私はこのPHPコードを使用していますが、結果が得られません...誰かアイデアはありますか?

    <?php
    $loadfile = simplexml_load_file('matches.xml');

    foreach ($loadfile->OddService->Results as $gameinfo):
    $kodate=$gameinfo->StartDate;
    $status=$gameinfo->Status;
    $id=$gameinfo->EventID;
    $league=$gameinfo->LeagueID;
    $hometeam=$gameinfo->HomeTeam['Name'];
    $awayteam=$gameinfo->AwayTeam['Name'];
    $home=$gameinfo->Outcomes->Outcome->Bookmaker->Odds[0]['currentPrice'];
    $away=$gameinfo->Outcomes->Outcome->Bookmaker->Odds[1]['currentPrice'];
    $draw=$gameinfo->Outcomes->Outcome->Bookmaker->Odds[2]['currentPrice'];
    ?>

前もって感謝します!

4

2 に答える 2

0

ルートノードを自分で追加した後、XMLファイルを試していますが、問題なく動作します。唯一の問題は、すべての結果ノードに結果ノードがあるわけではないため、PHP が foreach ループ内の最後の 3 行を実行するとエラーが発生することです。これで修正できます:

if ( $gameinfo->Outcomes ) {
    $home=$gameinfo->Outcomes->Outcome->Bookmaker->Odds[0]['currentPrice'];
    $away=$gameinfo->Outcomes->Outcome->Bookmaker->Odds[1]['currentPrice'];
    $draw=$gameinfo->Outcomes->Outcome->Bookmaker->Odds[2]['currentPrice'];
}

それ以外は、うまくいくはずです...var_dumpループ内で $gameinfo を実行しようとしましたか?

于 2012-11-08T22:44:06.070 に答える
0

そのコードには xpath はありません...ただし、XML をロードすると、ルートはすでに含まれているため、おそらく foreach を次のように変更する必要があります。

foreach ($loadfile->Results as $gameinfo):
于 2012-11-08T22:22:31.853 に答える