xml保存数据

一、安装libxml2

1、ubuntu安装:Sudo apt-get install Libxml2

2、交叉编译:下载libxml2库并解压,地址:http://xmlsoft.org/sources/libxml2-sources-2.7.8.tar.gz

./configure --host=mipsel-linux --prefix=/opt/libxml2

Make

Make install

编译程序时使用命令:mipsel-linux-gcc test.c -o test -I/opt/libxml2/include/libxml2/ -L/opt/libxml2/lib -lxml2


二、xml保存数据

init.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
        <test>
                <testone></testone>
                <testtwo>second</testtwo>
                <testthree>first</testthree>
        </test>
        <reference>
                <referenceone>aaa</referenceone>
        </reference>
</root>


test.c文件:

#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include <libxml/parser.h>
#include <libxml/tree.h>

struct testdata{
        char testone[20];
        char testtwo[20];
        char testthree[20];
};

int xml_parse(struct testdata testsave)
{
    xmlDocPtr doc;           //定义解析文档指针
    xmlNodePtr curNode,detail;      //定义结点指针(你需要它为了在各个结点间移动)
    xmlChar *szKey;          //临时字符串变量
    char *szDocName;
    szDocName = "init.xml";
    doc = xmlReadFile(szDocName,"UTF-8",XML_PARSE_RECOVER); //解析文件
    if (NULL == doc)
    {
       fprintf(stderr,"Document not parsed successfully. \n");
       return -1;
    }
    curNode = xmlDocGetRootElement(doc); //确定文档根元素

    xmlNodePtr propNodePtr = curNode;
    while(curNode != NULL)
    {
                if(xmlStrcasecmp(curNode->name,BAD_CAST"test")==0){
                        for(detail=curNode->children;detail;detail=detail->next){
                                if(xmlStrcasecmp(detail->name,BAD_CAST"testone")==0)
                                {
                                        xmlNodeSetContent(detail, BAD_CAST testsave.testone);
                                }
                                else if(xmlStrcasecmp(detail->name,BAD_CAST"testtwo")==0)
                                {
                                        xmlNodeSetContent(detail, BAD_CAST testsave.testtwo);
                                }
                                else if(xmlStrcasecmp(detail->name,BAD_CAST"testthree")==0)
                                {
                                        xmlNodeSetContent(detail, BAD_CAST testsave.testthree);
                                }
                        }
                }
                curNode = curNode->next;
        }

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

        return 1;
}

int main(void)
{
        struct testdata testsave={"first","second","third"};
        xml_parse(testsave);
        return 0;
}


编译test.c:gcc test.c -o test -lxml2

执行test后,init.xml:

<?xml version="1.0" encoding="UTF-8"?>
<root>
        <test>
                <testone>first</testone>
                <testtwo>second</testtwo>
                <testthree>third</testthree>
        </test>
        <reference>
                <referenceone>aaa</referenceone>
        </reference>
</root>



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柒号华仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值