首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL中存储某些XML子级

在SQL中存储某些XML子级
EN

Stack Overflow用户
提问于 2018-05-11 09:42:32
回答 1查看 35关注 0票数 0

我们的网络上有一个网络连接的温度计,当您连接到它的web地址(http://xxx.xxx.xxx.xxx/netfeellife.xml)时,它会输出一个XML流:

代码语言:javascript
复制
<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的格式,因为它是框创建的。

我最初的代码是这样的:

代码语言:javascript
复制
 <?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 --但没有成功。

我怎么能把我想要的三个元素提取出来并储存起来呢?谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-05-11 15:56:16

由于您的文档只包含一组读数,所以不需要foreach(),实际上它导致了问题.

代码语言:javascript
复制
//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";
 }
 //}

(我已经给出了评论的台词)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50289456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档