libxml2解析xml总结

本文总结了在Linux环境下,使用Eclipse IDE和C语言进行XML解析的经验。介绍了libxml2库的两种解析方式:直接调用接口和使用XPath。指出XPath在操作上的便利性,并给出了一个使用XPath的示例代码,结合时间差计算函数来评估程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

libxml2解析xml总结

  • 开发平台:linux
  • IDE:eclipse
  • 语言:c

使用libxml2对xml进行解析有两种方法,一种是纯使用libxml2提供的接口,另一种是使用xpath。只使用libxml2的接口需要进行多层的循环嵌套,比较麻烦,相对来说xpath封装的更好,使用起来更方便。下面具体来描述libxml2的函数以及使用xpath的方法。

代码块

下面是一个使用xpath的例子,其中tim_subtract.h是一个计算时间差的函数,方便统计程序的执行时间:

#include <stdio.h>
#include <stdlib.h>
#include <parser.h>
#include <tree.h>
#include <xpath.h>
#include <xpathInternals.h>
#include <xmlmemory.h>
#include <xpointer.h>
#include "tim_subtract.h"

//使用xpath来获得目标结点
xmlXPathObjectPtr getNodeset(xmlDocPtr pdoc, const xmlChar *xpath)
{
    xmlXPathContextPtr context = NULL; //定义XPath上下文指针
    context = xmlXPathNewContext(pdoc);//用xml文档指针来初始化context指针
    xmlXPathObjectPtr result = NULL; //定义XPath结果指针

    if (pdoc == NULL)
    {
        printf("pdoc is NULL\n");
        return NULL;
    }

    if (xpath)
    {
        if (context == NULL)
        {
            printf("context is NULL\n");
            return NULL;
        }

        result = xmlXPathEvalExpression(xpath, context);//计算xpath的查询结果,并存入result中
        if (result == NULL)
        {
            printf("xmlXPathEvalExpression return NULL\n");
            return NULL;
        }


        if (xmlXPathNodeSetIsEmpty(result->nodesetval))
        //使用result->nodesetval得到节点集合指针,其中包含了所有符合Xpath查询结果的节点
        {
            xmlXPathFreeObject(result);//使用释放Xpath对象指针;
            printf("nodeset is empty\n");
            return NULL;
        }
    }

    return result;
}

int main(int argc, char **argv)
{
    struct timeval t1,t2,diff;
    gettimeofday(&t1,0);
    xmlDocPtr pdoc = NULL;//文档指针
    xmlNodePtr proot = NULL;//节点指针

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值