Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9601916
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-04-23 22:06:46

XML文件的简单初步解析

作者:



摘要:通过扫描字符串及结构体数组,实现对XML文件的简单初步解析。

关键字:XML,解析

主要算法:XML文件的实质是字符串,解析XML的工作主要是了解XML的规则,从而对字符串进行分析,解析。从XML文件的开始扫描,连续获得2个标签的位置,转化为字符串,比较firstname和nextname,如果匹配关闭,则把标签名,内容,层次,存放到结构体数组中,继续扫描,如果不匹配,则把firstname压栈,继续扫描,直到firstname和nextname匹配或者与栈顶元素匹配。本题主要是自己设计一种数据结构和一种算法来把解析出来的XML数据信息,合理的存放,从而实现最简单最初步的解析。我是在控制台上实现的,运行后可以把XML的所有结点的标签名,值,以及它位于整个XML文件的层次。具体的请参考源程序,在VC6.0下测试通过(其中的web.xml为程序运行的初始xml文件)。

结构体定义:


struct xmlnode

{

	CString name;//标签名

	CString value;//内容

	int id;//这个标签的层次,通过栈实现

};

xmlnode node[1000]; 

解析函数:

void str2array(CString context)

{

	CString firstname;

	CString nextname;

	CString tempname;

	CString tempvalue;

	CStringArray stack;//一个记录标签是否关闭的栈

	stack.Add("");

	int max=0;

	int nid=1;

	int k=0;

	int i1,i2,j1,j2,k1,k2;

	while((k''))

	{

		k  ;

	}

	k1=k;

	while((k''))

	{

		k  ;

	}

	j1=k;

	firstname=getcontext(context,i1,k1);//获得第一个标签

	while((k''))

	{

		k  ;

	}

	k2=k;

	while((k''))

	{

		k  ;

	}

	j2=k;

	nextname=getcontext(context,i2,k2);//获得第二个标签

	tempname=''/'' firstname;

	while(k''))

				{

					k  ;

				}

				k2=k;

				while((k''))

				{

					k  ;

				}

				j2=k;

				nextname=getcontext(context,i2,k2);

				if(nextname.Compare(stack.GetAt(max))==0)

				{

					stack.RemoveAt(max);

					nid--;

					max--;

				}

			}while((nextname.GetLength()>0)&&(nextname[0]==''/''));

			//same

		}

		else//标签没有关闭,压栈

		{

			tempname=''/'' firstname;

			max  ;

			stack.Add(tempname);

			node[count].name=firstname;

			node[count].value="";

			node[count].id=nid;

			count  ;

			nid  ;

			//different

		}

		firstname=nextname;

		i1=i2;

		k1=k2;

		j1=j2;

		while((k''))

		{

			k  ;

		}

		k2=k;

		while((k''))

		{

			k  ;

		}

		j2=k;

		nextname=getcontext(context,i2,k2);

		tempname=''/'' firstname;

	}

}

附言:
本题为南京邮电大学计算机学院科协交流题,本程序对XML开始的说明部分不能解析,对注释也不能解析,只能达到一个最基本的解析。

阅读(377) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~