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函数,它不获取节点属性,这样子有些情况会定位不准)
 
          安装
                     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
                      
  1.  #include <stdio.h>
  2.                        #include <libxml/parser.h>
  3.                        #include <libxml/tree.h>
  4.                        int main(int argc, char **argv)
  5.                        {
  6.                                 xmlDocPtr doc = NULL;       /* document pointer */
  7.                                 xmlNodePtr root_node = NULL, node = NULL, node1 = NULL;/* node pointers */
  8.                         
  9.                                // Creates a new document, a node and set it as a root node
  10.                                 doc = xmlNewDoc(BAD_CAST "1.0");
  11.                                 root_node = xmlNewNode(NULL, BAD_CAST "root");
  12.                                 xmlDocSetRootElement(doc, root_node);
  13.                                 //creates a new node, which is "attached" as child node of root_node node.  
  14.                                 xmlNewChild(root_node, NULL, BAD_CAST "node1",BAD_CAST "content of 
  15.                                                          node1");
  16.                                 // xmlNewProp() creates attributes, which is "attached" to an node.
  17.                                node=xmlNewChild(root_node, NULL, BAD_CAST "node3",
  18.                                                              BAD_CAST"node has attributes");
  19.                                 xmlNewProp(node, BAD_CAST "attribute", BAD_CAST "yes");
  20.                                //Here goes another way to create nodes. 
  21.                               node = xmlNewNode(NULL, BAD_CAST "node4");
  22.                               node1 = xmlNewText(BAD_CAST"other way to create content");
  23.                               xmlAddChild(node, node1);
  24.                               xmlAddChild(root_node, node);
  25.                              //Dumping document to stdio or file
  26.                             xmlSaveFormatFileEnc(argc > 1 ? argv[1] : "-", doc, "UTF-8", 1);
  27.                     
  28.                             /*free the document */
  29.                             xmlFreeDoc(doc);
  30.                             xmlCleanupParser();
  31.                             xmlMemoryDump();//debug memory for regression tests
  32.     
  33.                            return(0);
  34.                     }
 
                     编译运行
                            
              g++ xmlCreator.cpp -o xmlCreator -I /home/xb/libxml2/xmlinst/include/libxml2/  
         -L /home/xb/libxml2/xmlinst/lib/ -lxml2         绿色文字为 libxml2 安装路径
    生成的xml
            
  1.   <?xml version="1.0" encoding="UTF-8"?>
  2.                          <root>
  3.                                     <node1>content of node 1</node1>
  4.                                     <node3 attribute="yes">node has attributes</node3>
  5.                                     <node4>other way to create content</node4>
  6.                           </root>
             呵呵,现就这些吧,好像很简单,算是入门级
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值