求助!用C++编写简单的标记语言解释器

来源:百度知道 编辑:UC知道 时间:2024/06/05 13:15:42
想了一整天,一点思路也没有···在网上搜了不少xml解释器,但都是很大很复杂的那种,源程序根本看不懂···请大家帮忙看看怎么做,尽量用最基本的算法。
题目:
请设计一个简单的XML 解释器, 它可以读入一个简单的XML文本文件(实际应用中XML 文见结构要复杂的多, 这里,我们只是仅仅处理文件中的“标记”)。文件内容如下所示。
一个简单的XML文件:
<class>
<student>
<name>ABC</name>
<id>123456</id>
</student>
</class>
每组“标记”包含两部分:标记名称和标记值。例如, <id>123456</id>是一组标记。标记名称包含在一对尖括号中("<" 和 ">"), <id> 称为标记头, </id> 称为标记尾。 标记头和标记尾之间的称为标记的值。 在上面的例子中,标记名称=id, 标记值=123456。

这个作业的目标是需要你编制一个程序,读入一个XML文件,然后从顶部(根结点)按层次顺序打印出该树状结构的所有结点(每行打印一个结点的内容), 每层按从左到右的顺序打印该层的节点。每个结点包含它的3个成员变量值。
每个结点内容的打印顺序为:结点编号 - 结点标记名称:标记值,儿子:儿子结点标号,儿子结点标号,……
例如,上面的文件将打印输出如下:
Element 1- class : null, child: Element 2
Element 2 - student: null, child: Element 3, Element 4
Element 3 - name : ABC, child: null
Element 4 - id: 123456, child null

做好了,但还不是太完善,你将就看看吧。

#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;

class Tree
{
public:
Tree(string name)
{
n=name;
val="";
no=++amount;
}
string Name(){return n;}
void SetVal(string value){val=value;}
void AddChild(Tree *p){child.push_back(p);}
void Print()
{
int i;
cout<<"Element "<<no<<" - "<<n<<" : ";
if(val.size()==0) cout<<"null";
else cout<<val;
cout<<", child: ";
if(child.size()==0) cout<<"null"<<endl;
else
{
for(i=0;i<child.size();++i)
cout<<"Element "<<