zoukankan      html  css  js  c++  java
  • 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的功能,根据项目不同要求可以进行扩展了解。
     
  • 相关阅读:
    POJ 1286 Necklace of Beads(Polya简单应用)
    《Nosql精粹》—— 读后总结
    基于ELK的数据分析实践——满满的干货送给你
    ELK5.0安装教程
    Oozie分布式工作流——EL表达式
    《分布式Java应用与实践》—— 后面两章
    Oozie分布式工作流——从理论和实践分析使用节点间的参数传递
    Oozie分布式工作流——Action节点
    Oozie分布式工作流——流控制
    图文并茂 —— 基于Oozie调度Sqoop
  • 原文地址:https://www.cnblogs.com/ultimateWorld/p/6072820.html
Copyright © 2011-2022 走看看