使用libxml2庫處理xml數據

C語言直接處理xml數據是很麻煩的,使用xmllib2.so庫函數,能方便的解析、生成xml數據。

目錄

  • libxml2.so庫安裝

  • 程序效果

  • 關鍵代碼

  • 參考資料

libxml2.so庫安裝

截圖1.CentOS安裝libxml2 

        執行命令“yum install libxml2”即可。

程序效果

1.讀取xml文件 

截圖2.xml文件內容 

截圖3.讀取並打印 

        讀取部分邏輯稍微複雜一點,有2層xml節點,需要循環讀取。

        Tips:編譯時gcc參數需要包含xmllib2的頭文件及庫,具體路徑需要查看安裝xmllib2之後在哪裏​。

2.創建xml文件 

​截圖4.生成的xml文件

        只創建1層的xml節點。

關鍵代碼

1.解析xml節點內容:

int parse_phone(xmlDocPtr doc, xmlNodePtr cur)
{
    assert(doc || cur);
    xmlChar *key;

    cur = cur->xmlChildrenNode;
    while (cur != NULL)
    {
        //讀取name節點
        if (!xmlStrcmp(cur->name, (const xmlChar *)"name"))
        {
            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
            printf("name:%s\t", key);
            xmlFree(key);
        }
        //讀取tel節點
        if (!xmlStrcmp(cur->name, (const xmlChar *)"tel"))
        {
            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
            printf("tel:%s\t", key);
            xmlFree(key);
        }
        //讀取address節點
        if (!xmlStrcmp(cur->name, (const xmlChar *)"address"))
        {
            key = xmlNodeListGetString(doc, cur->xmlChildrenNode, 1);
            printf("address:%s\t", key);
            xmlFree(key);
        }
        printf("\n");

        cur = cur->next;
    }

    return 0;
}

2.創建xml數據:

int create_phone_book()
{
    xmlDocPtr doc = NULL;
    xmlNodePtr phone_books=NULL;

    //創建xml文檔
    doc = xmlNewDoc(BAD_CAST "1.0");

    //添加xml節點並設定爲根節點
    phone_books = xmlNewNode(NULL, BAD_CAST "phone_books");
    xmlDocSetRootElement(doc, phone_books);

    //根節點下創建3個子節點
    xmlNewTextChild(phone_books, NULL, BAD_CAST "name", BAD_CAST "Tom");
    xmlNewTextChild(phone_books, NULL, BAD_CAST "tel", BAD_CAST "102918267437");
    xmlNewTextChild(phone_books, NULL, BAD_CAST "address", BAD_CAST "New York");

    //保存文件
    xmlSaveFormatFileEnc(XML_OUTPUT_FILE, doc, "UTF-8", 1);

    //釋放資源
    xmlFree(phone_books);
    xmlFreeDoc(doc);
    xmlCleanupParser();
    xmlMemoryDump();

    return 0;	
}

參考資料

1.libxml2的安裝及使用

https://blog.csdn.net/zhangna20151015/article/details/51332550

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章