XML简介
- XML是可扩展标记语言标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
- 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
- 整理一下在校期间做的XML解析方法。
代码下载
代码下载路径:download.csdn.net/download/mrhjlong/10369554
设计功能
- 将xml文件中的每一层的数据提取出来并保存到二叉树中;
- 遍历二叉树中的数据按xml原格式打印到屏幕;
- 将保存在二叉树中的数据按照xml文件格式输出到新的文件中。
存储结构体
xml文件存储流程图
示例解析过程
每一个结点包含数据域和指针域。数据域为xml每一层每一个结点存储的数据和结点的名字。指针域包含兄弟结点和子节点,兄弟结点指向xml文件中该节点同一层相同等级的下一个结点,子节点指向该节点的子节点。
遍历存储数据的二叉树
还原xml文件
函数描述
具体实现见代码。
#ifndef _MXML_H_
#define _MXML_H_
#define MAXSIZE 20
//二叉树结点结构体
typedef struct node
{
char data[MAXSIZE]; //内容
char name[MAXSIZE]; //标签名称
struct node *bro; //兄弟结点 (左子树)
struct node *child; //子结点 (右子树)
}Node;
/*
*Function : node_create
*Description: 新建结点,并将数据域赋值
*Param in : data 内容数据首地址
name 标签名称首地址
*Param out : 无
*Retrun : pNode 新建结点的地址
*/
Node *node_create(char *data, char *name);
/*
*Function : insert
*Description: 插入结点到二叉树中
*Param in : flag 0: 插入到当前指针所指结点的兄弟结点
1: 插入到当前指针所指结点的子结点
pNow 当前指针
pNode 待插入的结点
*Param out : 无
*Retrun : 无
*/
void insert(int flag, Node *pNow, Node *pNode);
/*
*Function : node_search
*Description: 根据标签名称查找结点,打印出数据内容
*Param in : tree 二叉树头结点地址
*Param out : 无
*Retrun : 无
*/
void node_search(Node *tree, char name[]);
/*
*Function : tree_print
*Description:
*Param in : tree 二叉树头结点地址
*Param out : 无
*Retrun : 无
*/
void tree_print(Node *tree);
/*
*Function : tree_print_form
*Description: 打印(遍历)二叉树存储的信息,格式有缩进输出
*Param in : tree 二叉树头结点地址
*Param out : 无
*Retrun : 无
*/
void tree_print_form(Node *tree);
/*
*Function : xml_tree_destroy
*Description: 销毁二叉树,释放各个结点内存
*Param in : pTree 待销毁的二叉树头结点指针的地址
*Param out : 无
*Retrun : 无
*/
void xml_tree_destroy(Node **pTree);
/*
*Function : xml_restore
*Description: 根据二叉树存储的信息,还原xml文件(数据有缩进)
*Param in : tree 二叉树头结点地址
fp 待还原的xml文件的地址
*Param out : 无
*Retrun : 无
*/
void xml_restore(Node *tree, FILE *fp);
/*
*Function : xml_tree_create
*Description: 读取xml文件数据,存储到新建的二叉树中
*Param in : fp 待读取的xml文件的地址
*Param out : 无
*Retrun : pNow 二叉树头结点地址
*/
Node *xml_tree_create(FILE *fp);
#endif