user-0 提问: 如何用定义好的数据结构来保存xml文档中的数据

回复:
user: user-0
content: 我感觉也是这样的，但我一进公司就让我自己写，其实tinyxml也给我参考了，但我都不知道怎么使用 我感觉这是一个很矛盾的逻辑，是吧！ 我连轮子怎么用都没搞清楚，让我造轮子，有点残忍啊 小公司就是这样，什么都得自己来，还得自己设计，痛苦啊。 如果真能学到东西，其实也是一件很愉快的事情，这也是一个漫长的过程。 我还是得私下自己先学会怎么用tinyxml，有没有推荐的相关教程啊。。。 万分感谢！！！

user: user-1
content: 先学会用轮子  然后去看轮子的代码，学习之  即  先学会去调用tinyxml的API函数  然后去学习tinyxml的代码，看它是如何实现的

user: user-0
content: #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <string.h> #include <sys/types.h> int fd; void OpenFile(const char* filename){ 	fd=open(filename,O_RDONLY); 	if(fd==-1){ 		printf("open file fail!\n"); 		exit(-1); 	} } void ReadAndSave(const char* filename){ 	OpenFile(filename); 	char buf[5120]={0}; 	while(read(fd,buf,sizeof(buf))){ 		//printf("%s\n",buf); 	} 	buf[strlen(buf)+1]='<';// 	char* str=buf; 	int fd2=open("xml.txt",O_CREAT|O_RDWR|O_TRUNC,0666); 	if(fd2==-1){ 		printf("open file2 fail\n"); 		exit(-1); 	} 	while(*str){// 		if(*str=='>'){ 			str++; 			while(*str!='<'){ 				printf("%c",*str); 				write(fd2,&(*str),1);//save the char 				//lseek(fd,0,SEEK_END); 				str++; 			} 		} 		if(*str=='<'){// 			//printf("\n"); 			str++; 		} 		str++;// 	} 	return ; } void FindElements(const char* filename,const char* value,int size){ //return the number of all elements 	OpenFile(filename); 	char buf[5120]={0}; 	while(read(fd,buf,sizeof(buf))); 	buf[strlen(buf)+1]='<'; 	char* str=buf; 	while(*str){ 		if(strncmp(str,value,size)==0){ 			str+=size; 			while((*str)!='<'){ 				printf("%c",*str); 				str++; 			} 		printf("\n"); 		} 		str++; 	} 	return; }  这是我最近写的一个解析xml文档中的内容，并将其保存在一个文件中，没有考虑<?xml..>还有注释部分，只是简单的将标签中的内容读取出来，这样做的话，如果有这样一个文本，我就无法将其变成xml文档

user: user-2
content: 引用 11 楼 u012963125 的回复:就是这个，我去百度下，状态机又是啥东西，其实我今天刚刚写出来，就是讲A 和something存入一个结构体中，然后构成一个结构体的链表。这中方法做的话就不能很好的区分节点之间的关系了，还有如果别人扔给你一个buf，里面存储了很多的数据，如何返回给别人一个xml文档。。。 难度又进一步加深。 所以说先要把数据结构容器做好嘛，开始时初始化好容器里所有的key，但value置空。在扫描时将value往里面填。最后就仅仅把非空的部分输出到文件。 解析器不光是要提取数据，还要有报错功能，哪一行出错，哪种错，用状态机就有这样的好处。

user: user-3
content: tinyxml

user: user-4
content: 节点用树，属性用链表 话说xml是这样写的么<sw_version string>ws_1.0</sw_version> 应该类似这样吧<sw_version type="string">ws_1.0</sw_version>

user: user-5
content: 你要调用库的话我原来用过   mxml.h 具体函数看http://blog.csdn.net/bluesonic/article/details/3887143

user: user-6
content: 就是处理字符串。有几个转义符的注意 看你上面的就是处理 <> 和<\>就行了  去看tinyxml吧 看别人怎么写的 自己锻炼，我觉得应该先学习人家怎么弄的，提取人家的精华，然后自己造车，并且造出比人家更好的车

user: user-0
content: 关键是要自己写一个解析器，而不是用别人已经写好的，这主要是为了锻炼自己，当然只是很简单的实现

user: user-6
content: 用那些解析库 如tinyxml...直接拿来用

user: user-0
content: 就是这个，我去百度下，状态机又是啥东西，其实我今天刚刚写出来，就是讲A 和something存入一个结构体中，然后构成一个结构体的链表。这中方法做的话就不能很好的区分节点之间的关系了，还有如果别人扔给你一个buf，里面存储了很多的数据，如何返回给别人一个xml文档。。。 难度又进一步加深。

user: user-2
content: 引用 9 楼 u012963125 的回复:3楼对的，其实只是想简单的写一个类似xml解析器，能够简单的解析一些xml文档。 状态机啊，就是如下格式 <A>something</A> 提取出 A 和 something 后再放入相应的数据结构中

user: user-0
content: 3楼对的，其实只是想简单的写一个类似xml解析器，能够简单的解析一些xml文档。

user: user-0
content: 就是不知道怎么造那个轮子。。，你懂我的意思

user: user-1
content: 解析xml有轮子了 还是说想造个轮子，不知道怎么造？

user: user-7
content: google DOM(文档对象模型)

user: user-8
content: 引用 2 楼 u012963125 的回复:说的太深奥了，小弟不懂，刚接触xml，任务是要自己写一个很简单的库，来解析上面固定xml文档，主要是如何将里面的内容存放到结构中，是怎么一个实现过程。而不是调用比人已经写好的库。给个思路也可以啊。万分感谢！ 那就通过你们通信的xml协议解析吧，解析字符串buf了！没别的

user: user-0
content: 说的太深奥了，小弟不懂，刚接触xml，任务是要自己写一个很简单的库，来解析上面固定xml文档，主要是如何将里面的内容存放到结构中，是怎么一个实现过程。而不是调用比人已经写好的库。给个思路也可以啊。万分感谢！

user: user-9
content: boost::property_tree