现在经常会对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. sql server中的左连接与右连接的简便写法

    左连接 *=(左表中的数据全部显示出来,右表中没有相关联的数据显示null) select Users.*,Department.name as DepartmentName from Users,D ...

  2. SDS查看部署在集成TOMCAT服务器中的项目目录结构

  3. 关于Cannot assign to 'self' outside of a method in the init family解决方法

    有时候我们重写父类的init方法时不注意将init后面的第一个字母写成了小写,在这个方法里面又调用父类的初始化方法(self = [super init];)时会报错,错误信息如下:error:Can ...

  4. OpenCV实现KNN算法

    原文 OpenCV实现KNN算法 K Nearest Neighbors 这个算法首先贮藏所有的训练样本,然后通过分析(包括选举,计算加权和等方式)一个新样本周围K个最近邻以给出该样本的相应值.这种方 ...

  5. EL表达式介绍

    EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${ ...

  6. Python多个版本安装!

    Python可以同时安装多个版本,目前我安装的是3.6和3.5,在Eclipse中使用3.6:在Visual Studio中使用3.5.如何让哪个版本的Python成为系统默认的解释器呢?通过调整不同 ...

  7. 查看MySQL的错误日志的方法

    我们经常在运行MySQL时会出一些错误,也经常被这些错误搞得晕头转向.当然解决这些问题的首要任务是找到日志信息. MySQL的错误信息是在data目录下的,且文件名为<hostname>. ...

  8. NPOI高效匯出Excel

    using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using NPOI. ...

  9. 使用NodeJS将XML解析成JSON及性能比较

    并不是所有的API都是以JSON格式返回的.我们有时侯不得不处理一些XML.幸运的是有一个NodeJS模块 xml2js 可以帮你做这件事.   比如,我们要处理下面这段XML   <?xml ...

  10. 在viewPager中的textview参数singleLine和gravity为center冲突bug

    在viewPager中有textview. 当textview的参数为singleLine和gravity为center时, onfling事件将会被读取为onclick事件. 这是andriod的一 ...