当前位置:  编程技术>c/c++/嵌入式

libxml教程(图文详解)

    来源: 互联网  发布时间:2014-10-17

    本文导语:  缘起我的CloudBox需要一个跨平台的方案来解决iOS上以及Android上的xml档案读取问题因为游戏总是需要储存一些设定值,或是过关存档之类的但又不能轻易的使用iOS内建提供的或著是Java内建提供的函数,这样整起来会很麻烦而且思...

缘起
我的CloudBox需要一个跨平台的方案来解决iOS上以及Android上的xml档案读取问题
因为游戏总是需要储存一些设定值,或是过关存档之类的
但又不能轻易的使用iOS内建提供的或著是Java内建提供的函数,这样整起来会很麻烦
而且思考到以后增加新的平台,会有不小的困扰,最后决定就用libxml
libxml又是可以在windows环境下使用的,因此直接用visual studio也可以轻易尝试学习API如何使用
环境简介
操作系统: Windows XP
IDE工具: Visual Studio 2008
工程类型: Visual C++ Win32 Console Application
下载链接
lib及.h档下载链接
http://xmlsoft.org/sources/win32/
dll下载连结
http://www.dll-files.com/dllindex/dll-files.shtml?iconv
http://www.dll-files.com/dllindex/dll-files.shtml?zlib1
http://www.dll-files.com/dllindex/dll-files.shtml?libxml2
设定说明图解

如图所示,我在工程目录中创建了两个文件夹,在libxml中放了iconv跟libxml的.h文档
另外也创建了lib档,将所有的lib都放进去

然后再项目工程中设定libaray的文件路经跟include的文件路径
代码说明
1. 读取XML文档

代码如下:

    xmlDocPtr doc; 
    xmlNodePtr root; 
    // load an exist xml file. 
    doc = xmlParseFile("test.xml"); 
    if (doc == NULL )  
    {  
        fprintf(stderr,"Document not parsed successfully. n");  
        return 0;  
    }  
    // get root 
    root = xmlDocGetRootElement(doc); 
    if (root == NULL)  
    {  
        fprintf(stderr,"empty documentn");  
        xmlFreeDoc(doc); 
        return 0; 
    } 

xmlDoc是一个struct,保存了一个xml的相关信息,例如文件名、文档类型、子节点等等;xmlDocPtr等于xmlDoc*,它搞成这个样子总让人以为是智能指针,其实不是,要手动删除的。
xmlParseFile函数以默认方式读入一个UTF-8格式的文档,并返回文档指针。
xmlReadFile函数读入一个带有某种编码的xml文档,并返回文档指针;细节见libxml2参考手册。
xmlFreeDoc释放文档指针。
xmlDocGetRootElement函数得到根节点curNode
2.建立XML文档
代码如下:

    void CreateNewXMLDemo() 
    { 
        // create xml document 
        xmlDocPtr doc = xmlNewDoc(BAD_CAST"1.0"); 
        xmlNodePtr root = xmlNewNode(NULL,BAD_CAST"root"); 

        //set root 
        xmlDocSetRootElement(doc,root); 

        //add node 
        xmlNewTextChild(root, NULL, BAD_CAST "newNode1", BAD_CAST "newNode1 content"); 
        xmlNewTextChild(root, NULL, BAD_CAST "newNode2", BAD_CAST "newNode2 content"); 
        xmlNewTextChild(root, NULL, BAD_CAST "newNode3", BAD_CAST "newNode3 content"); 

        //create node and add content 

        xmlNodePtr node = xmlNewNode(NULL,BAD_CAST"node2"); 
        xmlNodePtr content = xmlNewText(BAD_CAST"NODE CONTENT"); 
        xmlAddChild(root,node); 
        xmlAddChild(node,content); 

        // add attribute 
        xmlNewProp(node,BAD_CAST"attribute",BAD_CAST "yes"); 

        //create son and grandson 

        node = xmlNewNode(NULL, BAD_CAST "son"); 
        xmlAddChild(root,node); 
        xmlNewTextChild(node, NULL, BAD_CAST "grandson", BAD_CAST "grandson content"); 

        xmlNodePtr grandson = xmlNewNode(NULL, BAD_CAST "grandson2"); 
        xmlAddChild(node,grandson); 
        xmlAddChild(grandson, xmlNewText(BAD_CAST "This is a grandson2 node")); 

        //save xml 

        int nRel = xmlSaveFile("test3.xml",doc); 

        if (nRel != -1) 
        { 
            cout

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何在HP-UX 11.11下用cc编译libxml2-2.6.23源码,生成64位的libxml2.a库
  • libxml++连接库问题!急!
  • libxml2 安装的问题!
  • libxml2使用的问题
  • 关于unix下的libxml问题
  • libxml2是针对aix、sco、linux分不同版本还是统一版本?
  • redhat 安装libxml2 make install 时报错
  • 请教一个直接使用libxml2静态库的问题
  • 请问用libxml2怎么解析中文
  • 封装libxml2,那位有经验,请进
  • libxml2库解析xml文件出现的问题
  • 在Solaris中如何加入一个动态库 (如 libxml2.so.2)
  • 配置PHP出现的libxml2错误问题
  • libxml2可以移植到uclinux下面吗?
  • linux ubuntu9.04 libxml2安装问题
  • linux环境下如何用gcc编译含libxml2的C程序文件?
  • XML解析器 LibXML2
  • 怎么使用 linux 下的 libxml2 库读写 xml 文件和设置属性
  • 请教一个libxml的问题,急急!!!!!!
  • linux下使用libxml库C编写的解析XML的程序




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3