免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1281 | 回复: 0
打印 上一主题 下一主题

Libxml2使用简介 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-07-11 09:49 |只看该作者 |倒序浏览
       由于项目的需要,前一段时间负责找一个用c or cpp语言实现的xml parser,由于还要加上开源的条件,确实选择不是很多。因为目前开源的东西还是java的比较多阿!比较apache的xerces和libxml2后决定选择libxml2,下面将对使用Libxml2一个多月来的感受作一简介吧。个人意见仅供大家参考。

        首先说说Libxml2吧,Libxml2 是一个xml c语言版的解析器,本来是为Gnome项目开发的工具,是一个基于MIT License的免费开源软件。它除了支持c语言版以外,还支持c++、PHP、Pascal、Ruby、Tcl等语言的绑定,能在Windows、Linux、Solaris、MacOsX等平台上运行。功能还是相当强大的,相信满足一般用户需求没有任何问题。
具体的介绍就参考
http://xmlsoft.org/

         Libxml2主要的优点有:1.   安装、使用比较简单,容易入门;2.   支持的编码格式较多,能很好的解决中文问题(使用一个很简单的编码转换函数);3.   支持Xpath解析(这点对于任意定位xml文档中的节点还是很有用的哦);4.支持Well-formed 和valid验证,具体而言支持DTD验证,Schema验证功能正在完善中(目前多数解析器都还不完全支持shema验证功能);5.   支持目前通用的Dom、Sax方式解析等等。
     
        不足之处也是有的:1.  指针太多,使用不当时就会出现错误,在Linux系统中表现为常见的段错误,同样管理不当易造成内存泄漏;2.个人认为内面有些函数的功能设计的不是很好(比如获取Xpath函数,它不获取节点属性,这样子有些情况会定位不准)

   Libxml2的在linux下使用
         安装
                     1)      从xmlsoft站点或ftp(ftp.xmlsoft.org)站点下载libxml压缩包(libxml2-xxxx.tar.gz)
                     2)      对压缩包进行解压缩
                                 tar xvzf libxml2-xxxx.tar.gz
                      3)      进入解压缩后的文件夹中运行
                                (1)
                                           ./configure --prefix /home/user/myxml/xmlinst(此处为待安装的路径)
                                 (2)
                                            make
                                 (3)
                                             make install
                     4)      添加路径
               export PATH=/home/user/myxml/xmlinst/bin:$PATH

                       说明:为了结构清晰,最好将libxml2不安装在解压目录中。

                使用Libxml2生成xml
                       #include
                       #include
                       #include
                       int main(int argc, char **argv)
                       {
                                xmlDocPtr doc = NULL;       /* document pointer */
                                xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */
                        
                               // Creates a new document, a node and set it as a root node
                                doc = xmlNewDoc(BAD_CAST "1.0");
                                root_node = xmlNewNode(NULL, BAD_CAST "root");
                                xmlDocSetRootElement(doc, root_node);
                                //creates a new node, which is "attached" as child node of root_node node.  
                                xmlNewChild(root_node, NULL, BAD_CAST "node1",BAD_CAST "content of
                                                         node1");
                                // xmlNewProp() creates attributes, which is "attached" to an node.
                               node=xmlNewChild(root_node, NULL, BAD_CAST "node3",
                                                             BAD_CAST"node has attributes");
                                xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
                               //Here goes another way to create nodes.
                              node = xmlNewNode(NULL, BAD_CAST "node4");
                              node1 = xmlNewText(BAD_CAST"other way to create content");
                              xmlAddChild(node, node1);
                              xmlAddChild(root_node, node);
                             //Dumping document to stdio or file
                            xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
                    
                            /*free the document */
                            xmlFreeDoc(doc);
                            xmlCleanupParser();
                            xmlMemoryDump();//debug memory for regression tests
   
                           return(0);
                    }
  
                    编译运行
                             
              g++ xmlCreator.cpp -o xmlCreator -I /home/xb/libxml2/xmlinst/include/libxml2/   
         -L /home/xb/libxml2/xmlinst/lib/ -lxml2         (绿色文字为libxml2安装路径)
    生成的xml
              
                        
                                    content of node 1
                                    node has attributes
                                    other way to create content
                          
             呵呵,现就这些吧,好像很简单,算是入门级。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/43025/showart_337724.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP