0

我们的网络上有一个连接到网络的温度计,当您连接到其网址 ( 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 数据库- 但没有取得多大成功。

我怎样才能提取我想要的三个元素并存储它们?谢谢

4

1 回答 1

0

由于您的文档仅包含一组读数,因此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";
 }
 //}

(我已经显示了注释掉的行)。

于 2018-05-11T15:56:16.903 回答