Page 1 of 1

SimpleXML and ArrayAccess (I'm about to punch my monitor!)

Posted: Fri Sep 18, 2009 7:41 am
by Citizen
Ok, here's my problem:

Code: Select all

$xml = new SimpleXMLElement($xml);
 $var = $xml->QBXMLMsgsRs->ClassQueryRs;
 $vars = print_r($var,true);
Returns:
SimpleXMLElement Object
(
[@attributes] => Array
(
[requestID] => Q2xhc3NRdWVyeXw1
[statusCode] => 0
[statusSeverity] => Info
[statusMessage] => Status OK
)

[ClassRet] => Array
(
[0] => SimpleXMLElement Object
(
[ListID] => 80000002-1241128424
[TimeCreated] => 2009-04-30T17:53:44-05:00
[TimeModified] => 2009-04-30T17:53:44-05:00
[EditSequence] => 1241128424
[Name] => D1
[FullName] => D1
[IsActive] => true
[Sublevel] => 0
)

[1] => SimpleXMLElement Object
(
[ListID] => 80000001-1241128320
[TimeCreated] => 2009-04-30T17:52:00-05:00
[TimeModified] => 2009-04-30T17:52:00-05:00
[EditSequence] => 1241128320
[Name] => K1
[FullName] => K1
[IsActive] => true
[Sublevel] => 0
)

[2] => SimpleXMLElement Object
(
[ListID] => 80000003-1241128452
[TimeCreated] => 2009-04-30T17:54:12-05:00
[TimeModified] => 2009-04-30T17:54:12-05:00
[EditSequence] => 1241128452
[Name] => S1
[FullName] => S1
[IsActive] => true
[Sublevel] => 0
)
)

)
However, this:

Code: Select all

$xml = new SimpleXMLElement($xml);
 $var = $xml->QBXMLMsgsRs->ClassQueryRs->ClassRet;
 $vars = print_r($var,true);
 
Returns this:
SimpleXMLElement Object
(
[ListID] => 80000002-1241128424
[TimeCreated] => 2009-04-30T17:53:44-05:00
[TimeModified] => 2009-04-30T17:53:44-05:00
[EditSequence] => 1241128424
[Name] => D1
[FullName] => D1
[IsActive] => true
[Sublevel] => 0
)
Now, my understanding is that I'm going to have to use ArrayAccess (which I've never done before) and the examples on the manual aren't helping at all. They all seem to be custom class oriented and not something I would just use on my simpleXML object. Any ideas?

Re: SimpleXML and ArrayAccess (I'm about to punch my monitor!)

Posted: Fri Sep 18, 2009 2:31 pm
by Darhazer

Code: Select all

if (is_array($xml->QBXMLMsgsRs->ClassQueryRs->ClassRet)) {
  foreach ($xml->QBXMLMsgsRs->ClassQueryRs->ClassRet as $classRet) {
   // do whatever your want with $classRet
 }
}
Or maybe this will work to:

Code: Select all

for ($i=0; i < sizeof($xml->QBXMLMsgsRs->ClassQueryRs->ClassRet); $i++) {
 // do whatever you need with $xml->QBXMLMsgsRs->ClassQueryRs->ClassRet[$i]
}

Re: SimpleXML and ArrayAccess (I'm about to punch my monitor!)

Posted: Fri Sep 18, 2009 3:36 pm
by pickle
Ya - SimpleXML is so tweaked to the nines, that simple manipulation becomes difficult. There's a note on the documentation page for children() that basically says you can't simply iterate over an object

Try:

Code: Select all

$xml->QBXMLMsgsRs->ClassQueryRs->ClassRet->children();