MFC 解析XML

现在经常会对XML文件进行操作,怎么在MFC下去读和解析XML文件呢?直接上代码:

首先得等在stdafx.h中加入这句,以引入MSXML命名空间

#import <msxml3.dll> named_guids
using namespace MSXML2;

然后再要使用的类的头文件加入:

  1. //XMLParserintellecturalpointer(usedinparsingXMLfile)
copy
    MSXML2::IXMLDOMDocument2Ptrm_plDomDocument;
  1. MSXML2::IXMLDOMElementPtrm_pDocRoot;

然后在初始化函数中加入对XML COM的初始化:

copy
    //intianlizeXMLParserCOM
  1. ::CoInitialize(NULL);
  2. HRESULThr=m_plDomDocument.CreateInstance(MSXML2::CLSID_DOMDocument);
  3. if(FAILED(hr))
  4. {
  5. _com_errorer(hr);
  6. AfxMessageBox(er.ErrorMessage());
  7. EndDialog(1);
  8. }


接着是具体的函数:

copy
    voidCDemoDlg::OnBnClickedButtonOpenxml()
  1. //atfirst,weshouldclearm_strXML'scontentstoshownewdata
  2. m_strXMLData="";
  3. CFileDialogfileDlg(TRUE);
  4. if(IDOK==fileDlg.DoModal())
  5. m_strXMLPath=fileDlg.GetPathName();
  6. m_strXMLContents="Emptydocument";
  7. //justincaseyoudon'tgetanything
  8. UpdateData(FALSE);
  9. //SpecifyXMLfilename
  10. CStringstrFileName=m_strXMLPath;
  11. //ConvertXMLfilenamestringtosomethingCOMcanhandle
  12. _bstr_tbstrFileName;
  13. bstrFileName=strFileName.AllocSysString();
  14. //CalltheIXMLDOMDocumentPtr'sloadfunctiontoloadXMLfile
  15. variant_tvResult;
  16. vResult=m_plDomDocument->load(bstrFileName);
  17. if(((bool)vResult)==TRUE)//success
  18. {
  19. //ConvertbstrtosomethingyoucanuseinVC++
  20. _bstr_tbstrDocContents=m_plDomDocument->xml;
  21. m_strXMLContents=(LPCTSTR)bstrDocContents;
  22. //getXMLdataandshowonEditControl
  23. MSXML2::IXMLDOMNodePtrm_pXMLRoot=m_plDomDocument->documentElement;//firstchildispoint
  24. //m_strXMLData=_T(",")+DisplayXMLChildren(m_pXMLRoot);
  25. //looptoshowgetpoint'sLonandLanandsaveinmap<CString,CString>LonLanPoints
  26. for(MSXML2::IXMLDOMNodePtrpChild=m_pXMLRoot->firstChild;pChild!=NULL;pChild=pChild->nextSibling)
  27. DisplayXMLChildren(pChild);
  28. }
  29. }
  30. else
  31. m_strXMLContents="DocumentFAILEDtoload!";
  32. //incaseofoverloaddataweusebefore,weshouldaddonebuttonforclearthedata(Readytotransfrom)
  33. CStringCDemoDlg::DisplayXMLChildren(MSXML2::IXMLDOMNodePtrpParent)
  34. //Displaycurrentnode'sname
  35. //everyparent'snodenameisPOINT
  36. CStringstrElement=((LPCTSTR)pParent->nodeName);//outputispoint
  37. //looptogetdatapChild'sparentnodeispoint,andpoint'sparentnodeisroad
  38. for(MSXML2::IXMLDOMNodePtrpChild=pParent->firstChild;pChild!=NULL;pChild=pChild->nextSibling)
  39. //strElement+=((LPCTSTR)pChild->nodeName);
  40. CStringnodeName=((LPCTSTR)pChild->nodeName);
  41. CStringLon=_T("Lon");
  42. CStringLan=_T("Lan");
  43. CStringcurrentLon,currentLan;
  44. if(nodeName==Lon)
  45. currentLon=((LPCTSTR)pChild->text);
  46. if(nodeName==Lan)
  47. currentLan=((//addonepoint'sLonandLantomap
  48. LonLanPoints.insert(currentLon,currentLan);
  49. returnstrElement;
  50. }

[html] copy
    XML结构为:
  1. <road>
  2. point>
  3. id>/>
  4. Lon</Lat>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇