protected static function __parseXmlToObject($node, $node_class, $parse_attributes) { if ($node_class != null) { if ($node_class == 'array') { $obj = array(); } else { $obj = new $node_class(); } } else { $obj = new RecurlyObject(); } while ($node) { if ($node->nodeType == XML_TEXT_NODE) { if ($node->wholeText != null) { $text = trim($node->wholeText); if (strlen($text) > 0) { $obj->message = $text; } } } else { if ($node->nodeType == XML_ELEMENT_NODE) { $nodeName = str_replace("-", "_", $node->nodeName); if (is_array($obj)) { $child_node_class = RecurlyClient::$class_map[$nodeName]; $new_obj = RecurlyClient::__parseXmlToObject($node->childNodes->item(0), $child_node_class, $parse_attributes); if ($parse_attributes) { foreach ($node->attributes as $attrName => $attrNode) { $nodeName = str_replace("-", "_", $attrName); $nodeValue = $attrNode->nodeValue; if (!is_numeric($nodeValue) && ($tmp = strtotime($nodeValue))) { $new_obj->{$nodeName} = $tmp; } else { if ($nodeValue == "false") { $new_obj->{$nodeName} = false; } else { if ($nodeValue == "true") { $new_obj->{$nodeName} = true; } else { $new_obj->{$nodeName} = $nodeValue; } } } } } $obj[] = $new_obj; $node = $node->nextSibling; continue; } if ($node->getAttribute('nil')) { $obj->{$nodeName} = null; } else { switch ($node->getAttribute('type')) { case 'boolean': $obj->{$nodeName} = $node->nodeValue == 'true'; break; case 'date': $obj->{$nodeName} = strtodate($node->nodeValue); break; case 'datetime': $obj->{$nodeName} = strtotime($node->nodeValue); break; case 'float': $obj->{$nodeName} = (double) $node->nodeValue; break; case 'integer': $obj->{$nodeName} = (int) $node->nodeValue; break; default: $obj->{$nodeName} = $node->nodeValue; } } if ($node->childNodes->length > 1) { $child_node_class = RecurlyClient::$class_map[$nodeName]; if ($child_node_class != '') { $obj->{$nodeName} = RecurlyClient::__parseXmlToObject($node->childNodes->item(0), $child_node_class, $parse_attributes); } } if ($parse_attributes) { foreach ($node->attributes as $attrName => $attrNode) { $nodeName = str_replace("-", "_", $attrName); $nodeValue = $attrNode->nodeValue; if (!is_numeric($nodeValue) && ($tmp = strtotime($nodeValue))) { $obj->{$nodeName} = $tmp; } else { if ($nodeValue == "false") { $obj->{$nodeName} = false; } else { if ($nodeValue == "true") { $obj->{$nodeName} = true; } else { $obj->{$nodeName} = $nodeValue; } } } } } } } $node = $node->nextSibling; } return $obj; }