XML简单解析程序__C实现
2009-07-19 21:11
459 查看
最近一段时间总是用C和WEBSERVICE进行一些数据的交互,所以不得不用XML这些东西,用C写死分析程序总是不太好,稍做更改就是改程序,太麻烦。
所以,在用这些之前,自已写了点XML的解析小测试,感觉不是很难,拿出来和大家分享,如果您是高手,请不要见笑,如果您从中学到了点东西,那我非常高兴,不妥之处警请指正:
上述程序,结果一运行遍知。
前提是您必须安装LIBXML的库,可到http://xmlsoft.org/去下载,上面有详细的文档。
编译时要指定LIBXML的头文件路径和库的路径
gcc -I/xxx/libxml/include/libxml2 -L/xxx/libxml/lib -lxml2 -g -o target source.c
引用:http://blog.chinaunix.net/u/18768/showart_316081.html
所以,在用这些之前,自已写了点XML的解析小测试,感觉不是很难,拿出来和大家分享,如果您是高手,请不要见笑,如果您从中学到了点东西,那我非常高兴,不妥之处警请指正:
#include <libxml/xmlreader.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <stdlib.h> #define TEST char * get_xml_value(xmlTextReaderPtr reader); char * get_xml_key(xmlTextReaderPtr reader); int parse_xml(const char *xml_buf, int xml_buf_size); #ifdef TEST int main() { char *xml_buf = "<xmlTest xmlns=/"http://www.openuri.org//"><userName>1234567</userName><dstFolder>dddd</dstFolder><subject>test</subject></xmlTest>"; parse_xml(xml_buf, strlen(xml_buf)); /*这里只是测试,不对返回值做判断*/ return 0; } #endif /*分解提交过来的XML串,当然也可以是一个文件,只要更改相关调用函数*/ int parse_xml(const char *xml_buf, int xml_buf_size) { int ret = 0; int node_depth = 0; int node_type = 0; xmlTextReaderPtr xml_reader; xml_reader = xmlReaderForMemory(xml_buf, xml_buf_size, NULL, NULL, 0); if (NULL == xml_reader) { return -1; } while (1 == (ret = xmlTextReaderRead(xml_reader))) { /* 这块是判断节点深度的,您可以对分解深度做一个限制 node_depth = xmlTextReaderDepth(xml_reader); if (5 < node_depth) { ret = -2; break; } */ /*判断当前节点的类型*/ node_type = xmlTextReaderNodeType(xml_reader); switch(node_type) { case 1: get_xml_key(xml_reader); break; case 3: get_xml_value(xml_reader); break; } } xmlFreeTextReader(xml_reader); return ret; } /*取得当前节点的KEY值*/ char * get_xml_key(xmlTextReaderPtr reader) { const xmlChar *key; key = xmlTextReaderConstName(reader); if (NULL == key) { return NULL; } printf("KEY : %s/n", key); } /*取得当前节点的VALUE值*/ char * get_xml_value(xmlTextReaderPtr reader) { const xmlChar *value; value = xmlTextReaderConstValue(reader); if (NULL == value) { return NULL; } printf("VALUE : %s/n", value); } |
前提是您必须安装LIBXML的库,可到http://xmlsoft.org/去下载,上面有详细的文档。
编译时要指定LIBXML的头文件路径和库的路径
gcc -I/xxx/libxml/include/libxml2 -L/xxx/libxml/lib -lxml2 -g -o target source.c
引用:http://blog.chinaunix.net/u/18768/showart_316081.html
相关文章推荐
- Ruby解析XML简单实现
- XML--- 简单的DOM解析XML文件,并实现增,删,查,改的操作
- 一个SAX解析xml的简单程序。
- ajax简单解析xml文件(复杂的解析可以通过后台程序实现,如一般处理程序)
- java实现一个叫简单的xml解析
- Android上实现一个简单的天气预报APP(五) 解析XML
- 使用XPath解析xml实现简单的Spring IOC完成bean的依赖注入
- 解析:通过php socket并借助telnet实现简单的聊天程序
- Dom4j解析XML简单应用,XStream实现Java、XML转换
- Perl 版本的 XML 解析引擎及 XPATH 搜索引擎 —— 某人的简单实现版本
- java.beans包里面的两个类简单地实现XML解析
- 带参数的可执行jar包程序实现从指定位置读取xml并解析指定字段
- McbXML,codeguru上找的xml解析程序,c语言实现,没用到任何库
- 一个简单的利用msxml解析xml的程序
- PHP简单实现解析xml为数组的方法
- 解析:通过php socket并借助telnet实现简单的聊天程序
- 简单实现dom4j解析xml
- javascript异步调用XML进行解析的简单实现
- 简单的DOM解析XML文件,并实现增,删,改,查的操作