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

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

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

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

//XML Parser intellectural pointer (used in parsing XML file)
MSXML2::IXMLDOMDocument2Ptr   m_plDomDocument;
MSXML2::IXMLDOMElementPtr m_pDocRoot;

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

//intianlize XML Parser COM
::CoInitialize(NULL);
HRESULT hr = m_plDomDocument.CreateInstance(MSXML2::CLSID_DOMDocument); if(FAILED(hr))
{
_com_error er(hr);
AfxMessageBox(er.ErrorMessage());
EndDialog();
}

接着是具体的函数:

void CDemoDlg::OnBnClickedButtonOpenxml()
{
// at first ,we should clear m_strXML's contents to show new data
m_strXMLData = ""; CFileDialog fileDlg(TRUE);
if(IDOK == fileDlg.DoModal())
{
m_strXMLPath = fileDlg.GetPathName();
m_strXMLContents = "Empty document"; //just in case you don't get anything
UpdateData(FALSE); //Specify XML file name
CString strFileName = m_strXMLPath; //Convert XML file name string to something COM can handle
_bstr_t bstrFileName;
bstrFileName = strFileName.AllocSysString(); //Call the IXMLDOMDocumentPtr's load function to load XML file
variant_t vResult;
vResult = m_plDomDocument->load(bstrFileName); if(((bool)vResult) == TRUE ) //success
{
//Convert bstr to something you can use in VC++
_bstr_t bstrDocContents = m_plDomDocument->xml;
m_strXMLContents = (LPCTSTR) bstrDocContents; //get XML data and show on Edit Control
MSXML2::IXMLDOMNodePtr m_pXMLRoot = m_plDomDocument->documentElement; //first child is point
//m_strXMLData = _T(",") + DisplayXMLChildren(m_pXMLRoot); //loop to show get point's Lon and Lan and save in map<CString,CString>LonLanPoints
for(MSXML2::IXMLDOMNodePtr pChild = m_pXMLRoot->firstChild; pChild != NULL; pChild = pChild->nextSibling)
{
DisplayXMLChildren(pChild);
}
}
else
{
m_strXMLContents = "Document FAILED to load!";
} UpdateData(FALSE);
}
} //in case of overload data we use before, we should add one button for clear the data(Ready to transfrom)
CString CDemoDlg::DisplayXMLChildren(MSXML2::IXMLDOMNodePtr pParent)
{
//Display current node's name
//every parent's node name is POINT
CString strElement = ((LPCTSTR)pParent->nodeName); //output is point //loop to get data pChild's parent node is point,and point's parent node is road
for(MSXML2::IXMLDOMNodePtr pChild = pParent->firstChild; pChild != NULL; pChild = pChild->nextSibling)
{
//strElement += ((LPCTSTR)pChild->nodeName);
CString nodeName = ((LPCTSTR)pChild->nodeName);
CString Lon = _T("Lon");
CString Lan = _T("Lan");
CString currentLon,currentLan; if ( nodeName == Lon )
{
currentLon = ((LPCTSTR)pChild->text);
}
if ( nodeName == Lan )
{
currentLan = ((LPCTSTR)pChild->text);
} //add one point's Lon and Lan to map
LonLanPoints.insert(currentLon,currentLan);
}
return strElement;
}
XML结构为:
<road>
<point>
<id><id/>
<Lon></Lon>
<Lat></Lat>
</road>

MFC读取XML文件并解析的更多相关文章

  1. JAVA读取XML文件并解析获取元素、属性值、子元素信息

    JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取  InputStream   DocumentBuilderFactory   Element     Node 前言 最 ...

  2. [HTML]js读取XML文件并解析

    xml文件:test.xml <?xml version="1.0"?> <note> <to>George</to> <fr ...

  3. 分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要)

    原文:分享非常有用的Java程序 (关键代码)(六)---解析/读取XML 文件(重要) XML文件 <?xml version="1.0"?> <student ...

  4. 利用SAX解析读取XML文件

    xml     这是我的第一个BLOG,今天在看<J2EE应用开发详解>一书,书中讲到XML编程,于是就按照书中的步骤自己测试了起来,可是怎么测试都不成功,后来自己查看了一遍源码,发现在读 ...

  5. 读取xml文件报错:Invalid byte 2 of 2-byte UTF-8 sequence。

    程序读取xml文件后,系统报“Invalid byte 2 of 2-byte UTF-8 sequence”错误,如何解决呢? 1.程序解析xml的时候,出现Invalid byte 2 of 2- ...

  6. Java获取路径方法&相对路径读取xml文件方法

    (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI ...

  7. java 读取XML文件作为配置文件

    首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...

  8. (转) 读取xml文件转成List<T>对象的两种方法

    读取xml文件,是项目中经常要用到的,所以就总结一下,最近项目中用到的读取xml文件并且转成List<T>对象的方法,加上自己知道的另一种实现方法. 就以一个简单的xml做例子. xml格 ...

  9. C++ 读取XML文件(tinyXML库的应用)

    C++读取xml有很多第三方的xml解析库,最近使用tinyxml库来解析,下面直接上应用例子: Skin.xml文档内容如下: <UI> <Image name="ban ...

随机推荐

  1. 导航栏4种效果---原生js

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  2. GR&R

    ANOVA gauge R&R (or ANOVA gauge repeatability and reproducibility) is a measurement systems anal ...

  3. spring学习笔记(转)

    [1]搭建环境 1.添加jar包 使用spring需要 sring.jarcommons-loggin.jar 如果使用aop组件需要 aspectjweaver.jaraspectjrt.jar 如 ...

  4. [OpenGL ES 03]3D变换:模型,视图,投影与Viewport

    [OpenGL ES 03]3D变换:模型,视图,投影与Viewport 罗朝辉 (http://blog.csdn.net/kesalin) 本文遵循“署名-非商业用途-保持一致”创作公用协议 系列 ...

  5. maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path

    maven编译的时候遇到的奇葩问题,  非常奇葩, 所有其他同事都没有遇到 , 仅仅是我遇到了 不清楚是因为用了最新的JDK的缘故(1.8 update91)还是其他什么原因. 总之是证书的问题. 当 ...

  6. Python深入05 装饰器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...

  7. 20145305 《Java程序设计》实验一

    实验名称 实现凯撒密码,并进行测试. 实验内容 它是一种代换密码.据说凯撒是率先使用加密函的古代将领之一,因此这种加密方法被称为恺撒密码. 凯撒密码作为一种最为古老的对称加密体制,在古罗马的时候都已经 ...

  8. 20145305 《Java程序设计》第6周学习总结

    教材学习内容总结 1.输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStream实例 2.InputStream与OutputStream ...

  9. Java UDP网络编程 - 最简单示例

    UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...

  10. Spring MVC 中的基于注解的 Controller【转】

    原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 H ...