I am trying to loop though some XML and preform an action if an attribute value did or didn’t match the value it had on the previous iteration of the loop.
The incoming data is already sorted by the class.
Here is some sample XML and code
<character_list>
<character id="00001">
<name first="Name1"/>
<type class="Class A" classid="1"/>
</character>
<character id="00002">
<name first="Name2"/>
<type class="Class A" classid="1"/>
</character>
<character id="00003">
<name first="Name3"/>
<type class="Class B" classid="2"/>
</character>
<character id="00004">
<name first="Name4"/>
<type class="Class B" classid="2"/>
</character>
<character id="00005">
<name first="Name5"/>
<type class="Class B" classid="2"/>
</character>
<character id="00006">
<name first="Name6"/>
<type class="Class C" classid="3"/>
</character>
<character id="00007">
<name first="Name7"/>
<type class="Class D" classid="4"/>
</character>
<character id="00008">
<name first="Name8"/>
<type class="Class D" classid="4"/>
</character>
</character_list>
Here is my code
<?php
$query = "data.xml";
$xml = file_get_contents($query);
try {
$dataobj = NEW SimpleXMLElement($xml);
}
catch(Exception $e) {
echo "Parsing error! ".$e->getMessage()." in ".basename($e->getFile()).":".$e->getLine()."!";
exit;
}
$lastclass = 0;
foreach ($dataobj as $xmldata) {
$currentclass = $xmldata->type['classid'];
if ($lastclass == $currentclass) {
echo $xmldata->name['first']." ";
}
else
{
echo "<br>";
echo $xmldata->type['class']." - ";
echo $xmldata->name['first']." ";
}
$lastclass = $xmldata->type['classid'];
}
?>
Output from the code
Class A - Name1
Class A - Name2
Class B - Name3
Class B - Name4
Class B - Name5
Class C - Name6
Class D - Name7
Class D - Name8
Expected output
Class A - Name1 Name2
Class B - Name3 Name4 Name5
Class C - Name6
Class D - Name7 Name8
Can anyone see what I am doing wrong and how to correct it?
Just cast values to strings like that:
Without casting you are comparing simplexml objects.