Question

I am attempting to create a PHP query that can access an XML feed using dynamic variables within the query.

$xml = new SimpleXMLElement($row['feed_result']); 
$a = 'Sensor';
$b = 'Condition';
$c = 'LastReading';
echo 'Sensor 1 : '.$xml->{$a}[0]->{$b}[6]->{$c}.'<br />';

This is working for me, i.e. I am getting the correct value as a response from Sensor 1. However, I am totally stuck in terms of trying to make the [0] and [6] part of the dynamic query. For example, if I change the code like so the query fails and I get no response,

$xml = new SimpleXMLElement($row['feed_result']); 
$a = 'Sensor[0]';
$b = 'Condition[6]';
$c = 'LastReading';
echo 'Sensor 1 : '.$xml->{$a}->{$b}->{$c}.'<br />';

My question is how can make the section within the square brackets part of the dynamic query? Why won't the query work when the square brackets are part of a variable?

The XML looks like this:

<CurrentConditions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="" Status="0" Latitude="0.0" Longitude="0.0" Units="Metric">
<Sensor Name="sensor01" Port="1" Status="0">
<Condition Type="Humidity">
<DateReceived>2013-06-30T17:42:59.237Z</DateReceived>
<LastReading>56.00</LastReading>
<LastReadingDisplay>56.00 %</LastReadingDisplay>
</Condition>
<Condition Type="Humidity">
<DateReceived>2013-06-30T17:45:20.66Z</DateReceived>
<LastReading>57.00</LastReading>
<LastReadingDisplay>57.00 %</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T08:45:38.593Z</DateReceived>
<LastReading>25.20</LastReading>
<LastReadingDisplay>25.20 C</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T08:50:51.36Z</DateReceived>
<LastReading>25.30</LastReading>
<LastReadingDisplay>25.30 C</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T08:56:02.283Z</DateReceived>
<LastReading>25.30</LastReading>
<LastReadingDisplay>25.30 C</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T09:01:14.313Z</DateReceived>
<LastReading>25.30</LastReading>
<LastReadingDisplay>25.30 C</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T09:06:26.797Z</DateReceived>
<LastReading>25.30</LastReading>
<LastReadingDisplay>25.30 C</LastReadingDisplay>
</Condition>
</Sensor>
<Sensor Name="sensor02" Port="2" Status="0">
<Condition Type="Humidity">
<DateReceived>2013-07-27T08:45:38.593Z</DateReceived>
<LastReading>17.00</LastReading>
<LastReadingDisplay>17.00 %</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T08:45:38.593Z</DateReceived>
<LastReading>44.10</LastReading>
<LastReadingDisplay>44.10 C</LastReadingDisplay>
</Condition>
<Condition Type="Humidity">
<DateReceived>2013-07-27T08:50:51.36Z</DateReceived>
<LastReading>18.00</LastReading>
<LastReadingDisplay>18.00 %</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T08:50:51.36Z</DateReceived>
<LastReading>44.40</LastReading>
<LastReadingDisplay>44.40 C</LastReadingDisplay>
</Condition>
<Condition Type="Humidity">
<DateReceived>2013-07-27T08:56:02.283Z</DateReceived>
<LastReading>18.00</LastReading>
<LastReadingDisplay>18.00 %</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T08:56:02.283Z</DateReceived>
<LastReading>44.90</LastReading>
<LastReadingDisplay>44.90 C</LastReadingDisplay>
</Condition>
<Condition Type="Humidity">
<DateReceived>2013-07-27T09:01:14.313Z</DateReceived>
<LastReading>17.00</LastReading>
<LastReadingDisplay>17.00 %</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T09:01:14.313Z</DateReceived>
<LastReading>44.40</LastReading>
<LastReadingDisplay>44.40 C</LastReadingDisplay>
</Condition>
<Condition Type="Humidity">
<DateReceived>2013-07-27T09:06:26.797Z</DateReceived>
<LastReading>16.00</LastReading>
<LastReadingDisplay>16.00 %</LastReadingDisplay>
</Condition>
<Condition Type="Temperature">
<DateReceived>2013-07-27T09:06:26.797Z</DateReceived>
<LastReading>45.80</LastReading>
<LastReadingDisplay>45.80 C</LastReadingDisplay>
</Condition>
</Sensor>
</CurrentConditions>

Thanks

Was it helpful?

Solution

Are you looking for array index variables like this?

<?php

$xml = new SimpleXMLElement($row['feed_result']); 
$a = 'Sensor';
$aindex = 0; // <------
$b = 'Condition';
$bindex = 6; // <------
$c = 'LastReading';
echo 'Sensor 1 : '.$xml->{$a}[$aindex]->{$b}[$bindex]->{$c}.'<br />';

?>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top