首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请帮忙:C++代码实现,把一个XML文件放入vector<CNode>数组中,该如何处理

2012-05-01 
请帮忙:C++代码实现,把一个XML文件放入vectorCNode数组中请帮忙:把一个XML文件内容放入vectorCNode数

请帮忙:C++代码实现,把一个XML文件放入vector<CNode>数组中
请帮忙:把一个XML文件内容放入vector<CNode>数组中,C++代码如何实现?
 CNode>是自己定义的类
class CNode
{
  string m_strNodeName;//节点名称
  vector<string> m_vectorAttributeName; //属性名称数组
  vector<string> m_vectorAttributeValue;//属性值数组 以上2个数组顺序对应
  string m_strText; //节点的值
  vector<CNode> m_subvector; 该节点下的所有子节点组成的数组

}

我想把每个节点用CNode存储,如果有子节点,则存储在 m_subvector中,这样循环,感觉有点像树的存储结构。
但是我数据结构学的不好,不知道怎么用。请大家多多帮忙。我想过用递归,但是也不会写具体实现。感觉怎么做都有问题。




[解决办法]
很久以前一个小工具中写的,可能是有bug的.楼主小心。

C/C++ code
bool CConfig::Parse( TiXmlElement* pobjElement,CConfigEntry* pobjEntry ){    bool bRet = true;    pobjEntry->Name() = pobjElement->ValueStr();    if(pobjElement->GetText())    {        pobjEntry->Text() = pobjElement->GetText();    }    TiXmlElement* pobjCurrElement = pobjElement->FirstChildElement();        if (!pobjCurrElement)    {        return true;        }    CConfigEntry* pobjChildEntry = 0;    do     {         pobjChildEntry = new CConfigEntry;                  try          {            if(!Parse(pobjCurrElement,pobjChildEntry))            {                bRet = false;                break;            }                         pobjEntry->AddChild(pobjChildEntry);                pobjCurrElement = pobjCurrElement->NextSiblingElement();          }          catch(...)          {              bRet = false              break;          }    } while (pobjCurrElement);        if (pobjChildEntry && (!bRet))    {        delete pobjChildEntry;    }    return bRet;}
[解决办法]
C/C++ code
void load_xml(LPCTSTR path){    xml_obj o(path);    node n;    o.get_first_child(&n);    CNode* root = new Node(n);//构造函数由你的xml库定义的node,取得CNode里的各种属性    load_impl(o,root);//需要保存这个root}void load_impl(xmlobj& o,node* root){    node n;    if(!o.get_first_child(root,&n)) return;        do    {        root.m_subvector.push_back(new Node(n));        if(n.has_child())    load_impl(o,&n);    }while(n = o.get_next_brother(n,&n));//node如果是com接口则不能这么用} 

热点排行