C++解析XML字符串


  項目交互遇到了需要VC++中解析XML字符串,故花了點時間了解了下VC++中解析XML的諸多方法主要包括三種:msxml(微軟提供)、markup、TinyXml。

開始花了點時間使用msxml3,雖然也能解析出來數據,不過對數據的精細化處理個人感覺有點麻煩,最終選擇了markup.

      采用markup可以直接在http://www.firstobject.com/下載示例,把示例中的Markup.h、Markup.cpp拷貝到自己的項目目錄中,並添加到項目中,這樣就可以

使用其中的CMarkup類進行XML的相關操作了。

  在使用CMarkup類時,需要添加頭文件包含其頭文件,本例采用list結構體進行xml數據的接收,故頭文件包含如下:  

#ifndef _XML_H
#define _XML_H
#include "Markup.h"
#include <string>
#include <list>
  具體解析則需要根據項目需求進行相關操作,本例主要是解析xml固定節點下子節點數據集:
void AnalyseFeatureTolist(char *pszXml,list<student_item_t> *lst)
{
    CMarkup xml;//實例化CMarkup
    xml.SetDoc((const char*)pszXml);
    xml.ResetMainPos();
    student_item_t pstItem;
    if(xml.FindElem("Root"))
    {
        xml.IntoElem();//此句必須加上,進入到節點中才能繼續查找
        while(xml.FindElem("data"))
        {
            xml.IntoElem();
            if(xml.FindElem("NO")){
                pstItem.NO = _ttoi(xml.GetData());
            }        
            if(xml.FindElem("NAME")){
                strcpy(pstItem.NAME,xml.GetData());
            }
            if(xml.FindElem("SEX")){
                strcpy(pstItem.SEX,xml.GetData());
            }
            if(xml.FindElem("REMARK")){
                strcpy(pstItem.REMARK,xml.GetData());
            }
            lst->push_back(pstItem);
            xml.OutOfElem();//跳出節點
        }
        xml.OutOfElem();
    }
}
其中student_item_t pstItem;為定義的結構體,用來接收數據接收單條數據。
以上就是C++中通過markup解析xml字符串的操作示例,markup還有其他更多操作XML的功能,根據項目不同要求可以進行擴展了解。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM