예제 #1
0
파일: AXmlElement.cpp 프로젝트: achacha/AOS
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);
  }
}