现在经常会对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. iphone Dev 开发实例10:How To Add a Slide-out Sidebar Menu in Your Apps

    Creating the Xcode Project With a basic idea about what we’ll build, let’s move on. You can create t ...

  2. 从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中

    //从视频文件中读入数据-->将数据转换为灰度图-->对图像做canny边缘检测-->将这三个结构显示在一个图像中 //作者:sandy //时间:2015-10-10 #inclu ...

  3. pandas 0.19.0 documentation

    pandas 0.19.0 documentation » http://pandas.pydata.org/pandas-docs/stable/style.html

  4. 树莓派安装3.5inch RPi LCD (A)显示屏

    3.5inch RPi LCD (A) 资料 产品介绍 用户手册 开发资料 开发软件 树莓派镜像 演示视频 FAQ 在自定义Raspbian系统镜像上怎么使用树莓派LCD? 先确保自定义镜像可正常进入 ...

  5. Python基础05 缩进和选择

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例. ...

  6. git简单使用和说明文件的书写

    一. git 简单使用 1.注册 https://github.com/ 2.初始化 配置 git config --global user.name "Your Name" gi ...

  7. DedeTag Engine Create File False提示的种种原因及解决方法

    DedeTag Engine Create File False提示的种种原因及解决方法 第一种情况:站点.文件夹权限不足造成无法建立文件 这种情况的出现,一方面可能是Apache设置的读写权限较严格 ...

  8. 什么时候用position

    postion的情况有很多,fixed是固定,在我们需要把元素固定在某一个位置时使用 absolute和relative要配合使用,要把一个元素固定在另一个元素内某个位置时使用,外部元素为relati ...

  9. Asteroids (最小覆盖)

    题目很简单,但是需要推到出二分图最大匹配 = 最小覆盖 最小覆盖:证明过程http://blog.sina.com.cn/s/blog_51cea4040100h152.html Descriptio ...

  10. (转)C# DES

    本文原地址:http://blog.csdn.net/zhoufoxcn/article/details/1497095 作者:周公 , inputByteArray.Length);         ...