Linux下的xml文件的解析

本文介绍如何使用libxml2库解析XML文档,包括读取文档、获取根节点、遍历子节点及提取所需信息的过程。还提供了具体的C语言代码示例。

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

解析一个xml文档,从中取出想要的信息,例如节点中包含的文字,或者某个节点的属性,其流程如下:

l     用xmlReadFile函数读出一个文档指针doc;

l     用xmlDocGetRootElement函数得到根节点curNode;

l     curNode->xmlChildrenNode就是根节点的子节点集合;

l     轮询子节点集合,找到所需的节点,用xmlNodeGetContent取出其内容;

l     用xmlHasProp查找含有某个属性的节点;

l     取出该节点的属性集合,用xmlGetProp取出其属性值;

l     用xmlFreeDoc函数关闭文档指针,并清除本文档中所有节点动态申请的内存。

注意:节点列表的指针依然是xmlNodePtr,属性列表的指针也是xmlAttrPtr,并没有xmlNodeList或者xmlAttrList这样的类型。看作列表的时候使用它们的next和prev链表指针来进行轮询。只有在Xpath中有xmlNodeSet这种类型,其使用方法前面已经介绍了。

程序实例1:

#include </usr/include/libxml2/libxml/parser.h>
#include </usr/include/libxml2/libxml/tree.h>

int main(int argc , char **argv)
{
         //定义文档指针以便后面获取文档指针
    xmlDocPtr     pdoc = NULL;

         //定义一个根结点
    xmlNodePtr    proot=NULL , pcurnode = NULL;

         //要解析的文件
    char *psfilename=(const char*)"input.xml";

         //获取要读的文件数并传指针
    pdoc = xmlReadFile(psfilename ,"UTF-8",XML_PARSE_RECOVER);

          //判断指针是否获取成功,失败的情况
    if(NULL == pdoc)
         {
         printf("error: open file %s" , psfilename);
         exit(1);
           }

           //获取根结点给pcurnode
       pcurnode = xmlDocGetRootElement(pdoc);
          //判断根结点是否获取成功
    if(NULL == pcurnode)
        {
         printf("error: empty document %s" , psfilename);
         exit(1);
           }

             //判断此结点是不是想要的结点(通过名字比较),相同为0,不同为1
       if(xmlStrcmp(pcurnode->name , BAD_CAST "plist") != 0)
            {
        printf("error document " );
        exit(1);
           }
            //如果该结点拥有此属性,进行输出属性值
    if(xmlHasProp(pcurnode ,BAD_CAST "version"))
         {
                  //先获取相应属性值
         xmlChar *szAttr = xmlGetProp(pcurnode, BAD_CAST "version");
                 //输出此属性值
         printf("version : %s \n" , szAttr);

       }

    //释放文档指针
    xmlFreeDoc(pdoc);

    xmlCleanupParser();

return(0);
}

涉及函数:

xmlParseFile,xmlReadFile,xmlDocGetRootElement,xmlHasProp,xmlGetProp。其中xmlParseFile和xmlReadFile都具备打开XML文件的功能,xmlParseFile函数以默认方式读入一个UTF-8格式的文档,并返回文档指针。xmlReadFile函数读入一个带有某种编码的xml文档,并返回文档指针。

解析字符串xml的话就需要:

string s;

pdoc = xmlRecoverDoc(BAD_CAST s.c_str());

但是要求字符串没有回车每个结点之间不能有空格

例如: <><><><><>紧凑排列
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值