我们的网络上有一个网络连接的温度计,当您连接到它的web地址(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项目温湿度
41 41 41
29.7 30 30 30
3 3 3
2018年5月11日周五19:53:15 0 0
我也尝试过修改其他查询的代码-- Parse xml-file and insert into mysql database --但没有成功。
我怎么能把我想要的三个元素提取出来并储存起来呢?谢谢
发布于 2018-05-11 15:56:16
由于您的文档只包含一组读数,所以不需要foreach(),实际上它导致了问题.
//foreach ($xml as $syn)
// {
$scan_time = $syn->scan_time;
$temperature = $syn->temperature;
$humidity = $syn->humidity;
$sql="INSERT INTO thermometer (scan_time, temperature, humidity) VALUES ('$scan_time','$temperature','$humidity')";
$query = mysql_query($sql);
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
else
{
echo "Records added";
}
//}(我已经给出了评论的台词)。
https://stackoverflow.com/questions/50289456
复制相似问题