1

郵送で受け取った XML ファイルがあります。

<response>
       <id>D234>/id>
       <Logs>
          <time>UTC</time>
          <Alarms>          
          </Alarms>
       </Logs>
</response>

アラームログが少ない場合があります

<response>
   <id>D234>/id>
   <Logs>
    <time>UTC</time>
    <Alarms>
        <Log>
            <LD>Reset </LD>
            <utc>1383704429</utc>
        </Log>
        <Log>
            <LD>Triggered </LD>
            <utc>1383601449</utc>
        </Log>
    </Alarms>
    </Logs>
</response>

子供がいるかどうかを確認し<Alarms>、クエリを作成してそれらをデータベースに挿入したいと考えています。xpathを試してみました。子供がいるかいないかがわかりますし、数えることもできます。問題なし。

$xml = simplexml_load_string(POST_DATA);
$alarms = $xml->xpath('Logs/Alarms');
echo count($alarms);

しかし、各ログをどのようにトラバースできるのでしょうか? DBに入力するクエリを作成できるようにします。私は途方に暮れています。

例: どうすれば入手できLog0->timeますか?

4

2 に答える 2

1

ループ ロジックを変更する必要があります。このphp fiddleを見つけてください。

ソースコード:

<?php

$xml = simplexml_load_string("<response><id>D234</id>
   <Logs>
    <time>UTC</time>
    <Alarms>
        <Log>
            <LD>Reset </LD>
            <utc>1383704429</utc>
        </Log>
        <Log>
            <LD>Triggered </LD>
            <utc>1383601449</utc>
        </Log>
    </Alarms>
    </Logs>
</response>");

$alarms = $xml->xpath('Logs/Alarms');


if (!empty($alarms)) {
    
   foreach ($alarms[0]->Log as $log) {
       
       echo $log->LD;
       echo $log->utc;
   
   }

}


?>
于 2013-11-09T20:35:47.777 に答える
1

これを試して:-

$alarms = $xml->xpath('Logs/Alarms/Log');
foreach ($alarms as $oneAlarm) {
    echo $oneAlarm->LD . "\n";
    echo $oneAlarm->utc . "\n";
}
于 2013-11-09T20:45:27.780 に答える