我们的网络上有一个连接到网络的温度计,当您连接到其网址 ( http://xxx.xxx.xxx.xxx/netfeellife.xml ) 时,它会输出 XML 流:
<request>
<rf_status>0</rf_status>
<getvalue>0</getvalue>
<scan_time>Fri May 11 09:10:54 2018</scan_time>
<itemnum>3</itemnum>
<temperature>28.4</temperature>
<humidity>41</humidity>
<dection>0</dection>
<water>0</water>
<gas>0</gas>
<smoke>0</smoke>
<dw1>0</dw1>
<dw2>0</dw2>
<dw3>0</dw3>
<dw4>0</dw4>
<dw5>0</dw5>
<dw6>0</dw6>
<dw7>0</dw7>
<dw8>0</dw8>
<dw9>0</dw9>
</request>
但是,由于我们没有连接水/气体/烟雾探测器,输出的那些部分将始终为“0”,因此存储它们是没有意义的,只有<scan_time>和<temperature>,<humidity>它们有数字。我们也无法调整 XML 的格式,因为它是框创建的。
我的原始代码是这样的:
<?php
$xml=simplexml_load_file("http://xxx.xxx.xxx.xxx/netfeellife.xml") or die("Error: Cannot create object");
$db = new PDO('mysql:host=localhost;dbname=temperature;charset=utf8',
'root', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$stmt = $db->prepare("INSERT INTO thermometer (`scan_time`, `itemnum`,
`temperature`, `humidity`) VALUES(?, ?, ?, ?)");
$limit = new LimitIterator(new IteratorIterator($xml), 2, 4);
foreach ($limit as $row)
{
$scan_time = (string)$row;
//$limit->next();
$itemnum = (string)$row;
//$limit->next();
$temperature = (string)$row;
//$limit->next();
$humidity = (string)
$limit->current();
$stmt->execute(array($scan_time, $itemnum, $temperature, $humidity));
}
?>
但这保存了这样的数据:
scan_time itemnum 温度 湿度
41 41 41 41
29.7 30 30 30
3 3 3 3
2018 年 5 月 11 日星期五 19:53:15 0 0 0
我还尝试从此处的其他查询中调整代码 -解析 xml 文件并插入 mysql 数据库- 但没有取得多大成功。
我怎样才能提取我想要的三个元素并存储它们?谢谢