libxml2是一个C语言的XML库,能简单方便的提供对XML文件的各种操作,详细的描述可以查看:http://xmlsoft.org/。

Android中该库的源码在:external\libxml2
如果是C++可以参看external\tinyxml2

以下是简单的解析xml文件代码:

xml文件如下:

<xmlinfo>    <version>xmlinfo1.0version>    <keyinfo>FCtuwb2LO4evFrikeyinfo>    <chain>        <body>MIIDgzCCAmugAwIBAgbody>        <body>MIIDPDCCAiSgAwIBAbody>    chain>xmlinfo>

解析代码如下:

/********************************************************************    created:   2018/09/06    filename:  main.c    author:    Albert    depend:    libxml2.so     build:     mm    purpose:   parse a xml *********************************************************************/#include #include #include int main(int argc, char** argv){    xmlDocPtr doc; //定义解析文件指针    xmlNodePtr curNode; //定义结点指针,需要它在各个结点间移动    xmlChar *szKey; //临时字符串变量    char *szDocName;    if (argc <= 1)    {        printf("Usage : %s docname \n", argv[0]);        return -1;    }    szDocName = argv[1];    /*解析文件*/    doc = xmlParseFile(szDocName);    if ( NULL == doc)    {        fprintf(stderr,"Document not parsed successfully. \n");        return -1;    }    /*确定文件根元素*/    curNode = xmlDocGetRootElement(doc);    if ( NULL == curNode )    {        fprintf(stderr,"empty document \n");         xmlFreeDoc(doc);         return -1;     }    printf("curNode->name = %s \n", curNode->name);    if ( xmlStrcmp( curNode->name, BAD_CAST"xmlinfo" ) )    {        fprintf(stderr,"document of the wrong type, root node != xmlinfo\n");         xmlFreeDoc(doc);         return -1;     }    curNode = curNode->children;    xmlNodePtr propNodePtr = curNode;    while ( curNode != NULL )    {        /*取出结点中的内容*/        if ( !xmlStrcmp( curNode->name, BAD_CAST"version" ) )        {            szKey = xmlNodeGetContent(curNode);            printf("version: %s \n", szKey);             xmlFree(szKey);         }        /*取出结点中的内容*/        if ( !xmlStrcmp( curNode->name, BAD_CAST"keyinfo" ) )        {            szKey = xmlNodeGetContent(curNode);            printf("keyinfo: %s \n", szKey);             xmlFree(szKey);         }        /*取出结点中的内容*/        if ( !xmlStrcmp( curNode->name, BAD_CAST"chain" ) )        {            propNodePtr = curNode->children;            while( propNodePtr != NULL )            {                /*取出结点中的内容*/                if ( !xmlStrcmp( propNodePtr->name, BAD_CAST"body" ) )                {                    szKey = xmlNodeGetContent(propNodePtr);                    printf("body: %s \n", szKey);                     xmlFree(szKey);                 }                propNodePtr = propNodePtr->next;            }        }        curNode = curNode->next;     }    xmlFreeDoc( doc );    return 0;   }

结果如下:
curNode->name = xmlinfo
version: xmlinfo1.0
keyinfo: FCtuwb2LO4evFri
body: MIIDgzCCAmugAwIBAg
body: MIIDPDCCAiSgAwIBA

更多相关文章

  1. android studio 更改 app 包名和包的长度
  2. Android(安卓)OpenCV:读取Matlab生成的.mat文件并转换成OpenCV的M
  3. Android超级终端文件处理命令
  4. ubuntu下反翻译android apk
  5. Android(安卓)JNI 学习之Android.mk文件
  6. i.mx51开发板利用已有的镜像文件(SD卡启动)刷写Android
  7. 分析Cocos2d Android(安卓)项目的生成和运行
  8. Android(安卓)Apk 打包
  9. Android中application 全局变量

随机推荐

  1. Android可视化统计模块
  2. android 自定义View
  3. Android(安卓)短信发送器
  4. 如何在android中使用你自己的数据文件
  5. android 单选,复选按钮,以及toast
  6. multipart data using Android(安卓)Voll
  7. 【Android(安卓)Studio】Manifest Merger
  8. android jni 多线程编程 join thread
  9. Android(安卓)Studio 3.0 gradle提示太老
  10. 模拟头条