xml文件是变长的,例如table表的个数是不定的,每个table中的field数目也是不确定的。
现在将xml遍历后,想把每个table中的每个field存储,是不是需要定义结构?还是动态数组?
具体如何操作?请高手指点,把全部分数奉上!
<database>
<table1>
    <field1>id...
    <field2>name...
</table1>
<table2>
    <field1>type...
    <field2>game...
    <field3>id...
</table2>
<table3>
    ...
</table3>
</database>

解决方案 »

  1.   

    补充一下:因为程序在以后要经常调用每个table中的字段,所以要单独存储
      

  2.   

    另外,我已经用MSXML解析读出每个节点的值了,只是不知道如何在vc中存储
      

  3.   

    你的存储是指文件还是内存?如果是文件,XML本身就是一种存储方式啊。如果是内存,你可以自定义一种结构,使用数组、链表、MAP都可以,也可以不用存储,每次要访问时再通过XML解析器访问就行了,不过如果数据量很大的话效率就低了
      

  4.   

    嗯,也可以把这个XML数据读出来后写到一个临时数据库里,用ADO+Access就不错,调用时直接SQL取就行了,呵呵。
      

  5.   

    如你的例子定义数据结构
    struct Table1
    {
        char filed1[fildLength];
        char field2[fildLength];
    }struct Table2
    {
       char filed1[fildLength];
       char field2[fildLength];
       char field3[fildLength];
    }
    ...
    ,定义数据链表
    list<Table1> m_Table1;
    list<Table2> m_Table2;
    ...
    然后循环读xml中的table1节点
    while(pElement->NextSubElement("Table1"))
    {
       Table1 mStruct;
       mStruct.field1 = pElement->QueryStringValue("field1");
       mStruct.field2 = pElement->QueryStringValue("field2");
       m_Table1.push_back(mStruct);
    }pElement = RootElement;
    循环读xml中的table2节点..
    ...
    伪代码~:)   
    <database> 
    <table1> 
            <field1> id... 
            <field2> name... 
    </table1> 
    <table2> 
            <field1> type... 
            <field2> game... 
            <field3> id... 
    </table2> 
    <table3> 
            ... 
    </table3> 
    </database> 
      

  6.   

    "我已经用MSXML解析读出每个节点的值了"这本身也是一种存储方式,记下根节点,只要不释放,随时可以访问。
      

  7.   

    动态数组的实现对我来说也是个问题,我先试试sangermax的方法,谢谢哦!
    下次再来散分
      

  8.   

    to sangermax :
    你好,我回去认真的做了一下,由于xml中每个table中的字段数目是可变的,也就是说,在定义table结构的时候,结构体里面的field1,field2,field3...个数是不确定的,请问这样的结构如何定义呢?
      

  9.   

    最笨的办法:struct fieldpair
    {
      string name;
      string value;
    };typedef vector<fieldpair> fieldvector;
    typedef list<fieldvector*> tablelist;