AXmlElement *AXmlElement::_getOrCreate(LIST_AString& xparts, AXmlElement* pParent, bool insertIntoFront) { AString& strName = xparts.front(); CONTAINER::iterator it = m_Content.begin(); while (it != m_Content.end()) { if ((*it)->isNameEquals(strName)) { AXmlElement *p = dynamic_cast<AXmlElement *>(*it); if (!xparts.size()) { return p; } else { if (p) { xparts.pop_front(); if (!xparts.size()) return p; else return p->_getOrCreate(xparts, this, insertIntoFront); } else ATHROW_EX(this, AException::DataConflict, strName); //a_ Not AXmlElement type } } ++it; } //a_strName not found, create it AXmlElement *p = new AXmlElement(strName, pParent); addContent(p, AConstant::ASTRING_EMPTY, insertIntoFront); xparts.pop_front(); if (xparts.size() == 0) { return p; } else { return p->_getOrCreate(xparts, this, insertIntoFront); } }