libxml2使用

参考

https://blog.csdn.net/fanwenjieok/article/details/52848092

 

1.wget http://xmlsoft.org/sources/libxml2-2.9.10.tar.gz
2.
. /autogen.sh
./configure  CROSS_COMPILE=arm-linux-gnueabi --host=arm-linux-gnueabi --prefix=/home/xxx/libxml2 --enable-shared --with-python=no
make && make install

3.例子test.c
cd /home/xxx/libxml2
创建test.c
arm-linux-gnueabi-gcc test.c -o test -I./include/libxml2 -lxml2 -L./lib

xml使用示例https://www.cnblogs.com/lpshou/archive/2013/06/18/3141596.html

 

 

int get_node_value(xmlNodePtr node, char *nodename, char *value, int size)
{
    int i = 0;
    xmlNodePtr curNode;
    xmlChar *szKey;

    
    curNode = node;
    if(curNode == NULL) {
        printf("node is null\n");
        return -1;
    }
    curNode = curNode->xmlChildrenNode;

    while(curNode != NULL) {
        //取出节点中的内容
        if(xmlStrcmp(curNode->name, (const xmlChar *)"text")) {
            //printf("[%s][%d]name<%s>\n", node->name, i++, curNode->name);
        } 
        if(!xmlStrcmp(curNode->name, (const xmlChar *)nodename)) {
            szKey = xmlNodeGetContent(curNode);
            //printf("%s:%s\n", nodename, szKey);
            strncpy(value, szKey, size);
            xmlFree(szKey);
            return 0;
        }
        if(get_node_value(curNode, nodename, value, size) == 0) {
            return 0;
        }
        curNode = curNode->next;
    }

    
    return -1;
}


int parse_xml_buf(char *buf, int buf_size, char *filename, char *key, char *key_value, int size, char *save_file)
{
    xmlDocPtr doc;
    xmlNodePtr curNode;
    int ret = -1;
    
    
    if(filename != NULL) {
        doc = xmlReadFile(filename,"UTF-8",XML_PARSE_RECOVER);
        if(NULL == doc) {
            fprintf(stderr,"Document not parsed successfully\n");    
            return -1;
        }

    } else {
        doc = xmlReadMemory(buf, buf_size, NULL,"UTF-8",XML_PARSE_RECOVER);
        if(NULL == doc) {
            fprintf(stderr,"Document not parsed successfully\n");    
            return ret;
        }
    }

    curNode = xmlDocGetRootElement(doc); 
    if(NULL == curNode) {
        fprintf(stderr,"empty document\n");
        xmlFreeDoc(doc);
        return ret;
    }
    //printf("name<%s>\n", curNode->name);
    bzero(key_value, size);
    if(get_node_value(curNode, key, key_value, size) == 0) {
        //printf("find node value:%s\n", key_value);
        ret = 0;
    }
    xmlFreeDoc(doc);
    return ret;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值