linux c 使用libxml2读取配置文件
2009-08-12 16:19
246 查看
由于在c下读取文本的配置文件比较麻烦所以想找一个方便读取配置文件的方法。但是在网上左找右找,大家的方法都一样。还是读文件啊读文件。后来找到了 libxml,发现用法比较简单。研究了一把。确实还不错,人家不但带.so还带.a方便打包。呵呵。废话不说了。直接上程序。
首先创建一个xml吧。就叫它my.xml
然后贴出分析这个xml的程序readxml.c
奶奶滴,怎么中文到这里就变了啊。早知道就不加中文了。害得俺又加一次注释。
最后Makefile文件
最后编译运行结果如下:
祝大家好运。有问题大家互相交流吧。我这里只用到了简单的读取配置文件功能,这个libxml还能生成修改xml,有需要的时候再研究吧。希望对大家有用。
首先创建一个xml吧。就叫它my.xml
< ? xml version= "1.0" ? > < root> < mysql> < host> 127. 0. 0. 1< / host> < port> 3306< / port> < db> test < / db> < username> root< / username> < password> 123456< / password> < / mysql> < / root> |
# include < stdio. h> # include < stdlib. h> # include < unistd. h> # include < string . h> # include < libxml/ xmlmemory. h> # include < libxml/ parser. h> int parseStory( xmlDocPtr doc, xmlNodePtr cur) { xmlChar * key; cur = cur- > xmlChildrenNode; while ( cur ! = NULL ) { if ( ( ! xmlStrcmp( cur- > name, ( const xmlChar* ) "mysql" ) ) ) { printf ( "[%s]/n" , cur- > name) ; parseStory( doc, cur) ; } else if ( ( ! xmlStrcmp( cur- > name, ( const xmlChar* ) "host" ) ) ) { key= xmlNodeListGetString( doc, cur- > xmlChildrenNode, 1) ; printf ( " %s=>%s/n" , cur- > name, key) ; xmlFree( key) ; } else if ( ( ! xmlStrcmp( cur- > name, ( const xmlChar* ) "port" ) ) ) { key= xmlNodeListGetString( doc, cur- > xmlChildrenNode, 1) ; printf ( " %s=>%s/n" , cur- > name, key) ; xmlFree( key) ; } else if ( ( ! xmlStrcmp( cur- > name, ( const xmlChar* ) "db" ) ) ) { key= xmlNodeListGetString( doc, cur- > xmlChildrenNode, 1) ; printf ( " %s=>%s/n" , cur- > name, key) ; xmlFree( key) ; } else if ( ( ! xmlStrcmp( cur- > name, ( const xmlChar* ) "username" ) ) ) { key= xmlNodeListGetString( doc, cur- > xmlChildrenNode, 1) ; printf ( " %s=>%s/n" , cur- > name, key) ; xmlFree( key) ; } else if ( ( ! xmlStrcmp( cur- > name, ( const xmlChar* ) "password" ) ) ) { key= xmlNodeListGetString( doc, cur- > xmlChildrenNode, 1) ; printf ( " %s=>%s/n" , cur- > name, key) ; xmlFree( key) ; } cur = cur- > next; } return 0; } int main( int argc, char * * argv) { //定义2个指针,doc指向整个dom;cur指向结点,以后遍历树就靠这个指针鸟 xmlDocPtr doc; xmlNodePtr cur; //获取doc指针,也是把其他格式转成utf8的功能吧 doc= xmlParseFile( argv[ 1] ) ; if ( doc= = NULL ) { printf ( "Document not parsed successfully. /n" ) ; exit ( 1) ; } printf ( "xmlParseFile ok./n" ) ; //取得结点指针 cur= xmlDocGetRootElement( doc) ; if ( cur= = NULL ) { printf ( "empty document. /n" ) ; xmlFreeDoc( doc) ; exit ( 1) ; } printf ( "xmlDocGetRootElement ok./n" ) ; //取得根结点指针,我这里是root,记住,这里一定要是根结点 if ( xmlStrcmp( cur- > name, ( const xmlChar * ) "root" ) ) { printf ( "document of the wrong type, root node != root/n" ) ; xmlFreeDoc( doc) ; exit ( 1) ; } printf ( "ok./n" ) ; //通过这个递归函数,遍历出所有感兴趣的结点。 parseStory( doc, cur) ; //一定要释放doc哦。 xmlFreeDoc( doc) ; exit ( 0) ; } |
最后Makefile文件
CC= gcc - Wall - g LIBS= ` xml2- config - - libs` CFLAGS= ` xml2- config - - cflags` readxml: readxml. o $( CC) - o readxml readxml. o $( LIBS) readxml. o: readxml. c $( CC) - c readxml. c $( CFLAGS) clean: rm - f * . o readxml |
huying@ubuntu: ~ / c/ xml$ make gcc - Wall - g - c readxml. c `xml2- config - - cflags` gcc - Wall - g - o readxml readxml. o `xml2- config - - libs` huying@ubuntu: ~ / c/ xml$ . / readxml my. xml xmlParseFile ok. xmlDocGetRootElement ok. ok. [ mysql] host= > 127. 0. 0. 1 port= > 3306 db= > test username= > root password= > 123456 huying@ubuntu: ~ / c/ xml$ |
相关文章推荐
- Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量
- eclipse 使用maven 构建springboot 读取多个配置文件
- 解决windows7下使用IIS配置的PHP无法上传文件的方法
- Mybatis配置文件之plugins使用
- Spring无配置使用properties文件
- Spring Boot中配置文件application.properties使用
- .net 开发 配置文件的灵活使用
- Linux ifconfig使用及其配置文件
- .NET配置文件 使用详解
- spring使用注解时配置文件的写法
- 配置文件的使用,如果要跨平台,建议直接用 xml, json, ini 或者本文档,看自己方便
- 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等
- 第二人生的源码分析(六十九)使用LLXmlTree类来分析XML配置文件
- spring配置文件<import>标签中使用${}占位符获得配置文件的属性值
- Struts编程 Tiles的使用2——基于XML配置文件的定义和属性
- 使用spring+JMX热部署配置文件
- 使用lesscss-maven-plugin,实时监控less文件的编译,只需一步配置
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 【saltstack学习笔记之十】使用sls安装nginx并管理nginx的配置文件
- NHibernate 配置文件的处理和使用多数据库的多层架构思路(第一部分)