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);

但是如何才能遍历每一个日志呢?这样我就可以形成一个查询以输入数据库。我很茫然。

例如:我怎样才能得到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 回答