/** * Convert a QuickBooks_XML_Node object to a QuickBooks_Object_* object instance * * @param QuickBooks_XML_Node $XML * @param string $action_or_object * @return QuickBooks_Object */ public static function fromXML($XML, $action_or_object = null) { if (!$action_or_object) { $action_or_object = $XML->name(); } $type = QuickBooks_Utilities::actionToObject($action_or_object); $class = 'QuickBooks_Object_' . ucfirst(strtolower($type)); if (class_exists($class)) { $Object = QuickBooks_Object::_fromXMLHelper($class, $XML); $children = array(); switch ($Object->object()) { case QUICKBOOKS_OBJECT_PURCHASEORDER: $children = array('PurchaseOrderLineRet' => array('QuickBooks_Object_PurchaseOrder_PurchaseOrderLine', 'addPurchaseOrderLine')); break; case QUICKBOOKS_OBJECT_INVOICE: $children = array('InvoiceLineRet' => array('QuickBooks_Object_Invoice_InvoiceLine', 'addInvoiceLine')); break; case QUICKBOOKS_OBJECT_ESTIMATE: $children = array('EstimateLineRet' => array('QuickBooks_Object_Estimate_EstimateLine', 'addEstimateLine')); break; case QUICKBOOKS_OBJECT_SALESRECEIPT: $children = array('SalesReceiptLineRet' => array('QuickBooks_Object_SalesReceipt_SalesReceiptLine', 'addSalesReceiptLine')); break; case QUICKBOOKS_OBJECT_JOURNALENTRY: $children = array('JournalCreditLine' => array('QuickBooks_Object_JournalEntry_JournalCreditLine', 'addCreditLine'), 'JournalDebitLine' => array('QuickBooks_Object_JournalEntry_JournalDebitLine', 'addDebitLine')); break; } foreach ($children as $node => $tmp) { $childclass = $tmp[0]; $childmethod = $tmp[1]; if (class_exists($childclass)) { foreach ($XML->children() as $ChildXML) { if ($ChildXML->name() == $node) { $ChildObject = QuickBooks_Object::_fromXMLHelper($childclass, $ChildXML); $Object->{$childmethod}($ChildObject); } } } } return $Object; } return false; }