CzXmlNode* CzXmlNode::Clone(CzXmlNode* parent) { // Clone node CzXmlNode* node = new CzXmlNode(); node->Managed = false; node->Name = Name; node->Value = Value; node->HasValue = HasValue; node->Parent = parent; node->Parser = NULL; node->Line = Line; // Clone nodes attributes for (CzXmlAttributeList::iterator it = Attributes.begin(); it != Attributes.end(); ++it) { CzXmlAttribute* attrib = new CzXmlAttribute(); attrib->Managed = false; attrib->setName((*it)->getName().c_str()); attrib->setValue((*it)->getValue().c_str()); node->AddAttribute(attrib); } return node; }
bool CzXomlLoad::CreateInstance(IzXomlResource* parent, CzScene* scene, CzString* template_name, CzString* parameters) { if (template_name == NULL) return false; // Get the template CzTemplate* temp = (CzTemplate*)CzXomlResourceManager::FindResource(template_name->getHash(), CzHashes::Template_Hash, parent); if (temp != NULL) { if (parameters != NULL && !parameters->isEmpty()) { // Create a set of XML attributes that will replace the template parameters CzXmlNode* replacements = new CzXmlNode(); replacements->Managed = false; // Split parameter two into paramater=value pairs CzSlotArray<CzString*>* split = parameters->Split(':'); CzSlotArray<CzString*>* strings = new CzSlotArray<CzString*>(); for (int t = 0; t < split->getSize(); t++) { CzString* pair = split->element_at(t); if (pair != NULL) { // Split paramater / value pair pair->Split('=', strings); CzString* name = strings->element_at(0); CzString* value = strings->element_at(1); if (name != NULL && value != NULL) { // Set template paramater CzXmlAttribute* attrib = new CzXmlAttribute(); attrib->Managed = false; attrib->setName(name->c_str()); attrib->setValue(value->c_str()); replacements->AddAttribute(attrib); } } strings->clear(true); } temp->Instantiate(scene, replacements); delete replacements; delete strings; split->clear(true); delete split; } else temp->Instantiate(scene, NULL); } #if defined (_DEBUG) else { CzDebug::Log(CZ_DEBUG_CHANNEL_WARNING, "Action - FromTemplate - Cannot find template - ", template_name->c_str(), parent->getDebugInfo().c_str()); return false; } #endif return true; }