Search code examples
phpsimplexml

trouble to get data of xml file using simplexml


as I´ve tried to get data out of a XML file using simplexml I´ve encountered some understandig Problems or just a knot in my brain ;-(

First the XML file:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<data>
 <sensor1>
  <name>Hallentemp Kuehlhaus</name>
  <value_float>20.50</value_float>
  <value_int>2050</value_int>
  <value_string>20.50</value_string>
  <min_abs_float>15.75</min_abs_float>
  <max_abs_float>41.56</max_abs_float>
  <min_day_float>19.87</min_day_float>
  <max_day_float>20.56</max_day_float>
  <unit>°C</unit>
  <value_display>20.50 °C</value_display>
 </sensor1>
 <sensor2>
  <name>Geräte LED</name>
  <value_float>0.00</value_float>
  <value_int>0</value_int>
  <value_string>0.00</value_string>
  <value_display>0.00</value_display>
 </sensor2>
 <sensor101>
  <name>Temp Kuehlhaus</name>
  <value_float>6.00</value_float>
  <value_int>600</value_int>
  <value_string>6.00</value_string>
  <min_abs_float>3.81</min_abs_float>
  <max_abs_float>252.93</max_abs_float>
  <min_day_float>5.43</min_day_float>
  <max_day_float>8.81</max_day_float>
  <unit>°C</unit>
  <value_display>6.00 °C</value_display>
 </sensor101>
 <sensor104>
  <name>std</name>
  <value_float>11.00</value_float>
  <value_int>1100</value_int>
  <value_string>11.00</value_string>
  <min_abs_float>0.00</min_abs_float>
  <max_abs_float>23.00</max_abs_float>
  <min_day_float>0.00</min_day_float>
  <max_day_float>11.00</max_day_float>
  <unit>h</unit>
  <value_display>11.00 h</value_display>
 </sensor104>
 <system>
  <date>14.12.2015</date>
  <time>11:04:43</time>
  <devicename>ALL3418V2</devicename>
  <devicetype>ALL3418</devicetype>
  <sys>254163</sys>
 </system>
</data>

And my php snippet:

<?php
$datei = "http://192.168.10.14/xml/sensordata.xml";

#$datei = "sensordata.xml";

    $Response = @simplexml_load_file($datei) or
     die ("Fehler beim Laden der Datei: ".$datei."\n");

var_dump($Response); //for Debugging purposes

foreach ($Response) {
            echo $sensor.$sensordata;
        }


    #echo "<br>\n";
    #}
    ?>

And now my Intention behind it:

I want to echo/print (and in the future to write it to mysql db) the values for two sensors (sensor1/sensor101) and some System Information (system) like time/date. Maybe it would be interesting to get day_min and day_max values. But this is not necessary in the first. I´ve tried several things to Loop the nodes but None worked. Perhaps you can help?


Solution

  • The $Response is of type SimpleXMLElement which you can loop using a foreach.

    In the foreach, you can check the $key if it is "sensor1" or "sensor2" etc.. The $value in the foreach is also of type SimpleXMLElement. You can access its name property for example like this:

    $value->name
    

    I think you can do it like this:

    <?php
    $datei = "http://192.168.10.14/xml/sensordata.xml";
    
    $Response = @simplexml_load_file($datei) or
    die ("Fehler beim Laden der Datei: ".$datei."\n");
    
    foreach ($Response as $key => $value) {
        if ($key === "sensor1") {
            echo $value->name;
            // etc ...
        }
    }
    ?>