0

xpath を使用して xml に「「FT」という名前の結果アイテムを照会していますが、ライブ フィードであるため、そうでない結果アイテムがあることはわかっています。これらの「非オブジェクト」に値を割り当てることはできますか? mysqlにそれらを入力するだけでなく、返された値を入力できますか?

結果アイテムを含む私のxmlの一部は次のとおりです。

 <live>
    <Match ct="0" id="771597" LastPeriod="2 HF" LeagueCode="19984" LeagueSort="1"              LeagueType="LEAGUE" startTime="15:00" status="2 HF" statustype="live" type="2" visible="1">

        <Home id="11676" name="Manchester City" standing="1"/>
    <Away id="10826" name="Newcastle United" standing="3"/>

        <Results>
        <Result id="1" name="CURRENT" value="1-1"/>
            <Result id="2" name="FT" value="1-1"/>
            <Result id="3" name="HT" value="1-0"/>
        </Results>
    </Match>

    <Match ct="0" id="771599" LastPeriod="1 HF" LeagueCode="19984" LeagueSort="1" LeagueType="LEAGUE" startTime="16:00" status="2 HF" statustype="live" type="2" visible="1">

        <Home id="11678" name="Norwich City" standing="1"/>
    <Away id="10828" name="West Ham United" standing="3"/>

    <Results>
            <Result id="1" name="Current" value="2-3"/>
            <Result id="2" name="HT" value="1-3"/>
        </Results>
    </Match>
    </live>

このビットのphpで「FT」という名前のすべてのスコアを取得しようとしています:

$result = $xpath->query('./Results/Result[@name="FT"]', $match);
    $halftimescore = $result->item(0)->getAttribute("value");

上記も変更しました:

    $result = $xpath->query('./Results/Result[@name="FT"]', $match);

      if($result->length > 0) {
      $halftimescore = $result->item(0)->getAttribute("value");
}

エラーは削除されますが、FT値は1-1、3-0になり、オブジェクト以外の場合は3-0が繰り返されます

4

1 に答える 1

2

あなたの xpath クエリは、のループ内で作成されているようです$matches

現在の の FT 結果がない場合、ループの開始時にその値を初期化していなければ、前の値を保持する<Match>のは正常です。$halftimescore

$halftimescoreそれぞれを初期化する必要があります<Match>

$halftimescore = null;
$result = $xpath->query('./Results/Result[@name="FT"]', $match);
if($result->length > 0) {
  $halftimescore = $result->item(0)->getAttribute("value");
}

または、else ステートメントを使用します。

$result = $xpath->query('./Results/Result[@name="FT"]', $match);
if($result->length > 0) {
  $halftimescore = $result->item(0)->getAttribute("value");
} else {
  $halftimescore = null;
}

ちなみに、Match の FT スコアは 1 つしかないため、$result->length === 1代わりに xpath の結果をテストするために使用します。

于 2012-12-12T09:53:19.283 に答える