MFC读取XML文件并解析

现在经常会对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(1);
}

接着是具体的函数:

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>
时间: 2024-10-22 05:33:13

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

使用Pull解析器生成XML文件和读取xml文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器. 一.布局界面 [html] view plaincopyprint? <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

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

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

Excel开发学习笔记:读取xml文件及csv文件

读取xml文件 有好多种读取xml的方式,xmlDOM比较常见,我使用了另外一种,它以数据流的方式打开文件并读取内容 Imports System.Xml  Dim group As New List(Of String)  Using reader As XmlReader = XmlReader.Create(OpenFileDialog2.FileName)      While reader.ReadToFollowing("group")          reader.Mo

Java使用相对路径读取xml文件

java使用相对路径读取xml文件 博客分类: java javaXMLJavaWeb 一.xml文件一般的存放位置有三个: 1.放在WEB-INF下: 2.xml文件放在/WEB-INF/classes目录下或classpath的jar包中: 3.放在与解析它的java类同一个包中,不一定是classpath: 二.相对应的两种使用相对路径的读取方法: 方法一:(未验证) 将xml文件放在WEB-INF目录下,然后 程序代码: InputStream is=getServletContext(

Java之Pull方式生成xml文件和解析xml文件

Pull XML解析器早已经被google集成到android sdk当中,它是google官方推荐的解析器. 如果我们要在Java桌面.J2ME等当中使用Pull方式生成xml文件和解析xml文件,需要用到kxml2: KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/ 普通XML PULL解析器的官网是http://xmlpull.org/ 实验开始: 在Eclipse中新建一个java项目,其中新建一个libs文件夹,拷贝从网上下载的k

XML文件的解析

操作XML的对象属性和方法:   对象                                属性和方法                               说明 XmlDocument                 DocumentElement属性         获取根节点                                          ChilNodes属性                        获取所有子节点                

慕容小匹夫 Unity3D移动平台动态读取外部文件全解析

Unity3D移动平台动态读取外部文件全解析 c#语言规范 阅读目录 前言: 假如我想在editor里动态读取文件 移动平台的资源路径问题 移动平台读取外部文件的方法 补充: 回到目录 前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑和手指了.那么今天开始,小匹夫会记录一些平时工作中遇到的坑,以及小匹夫的应对方法,欢迎各位拍砖讨论.那么今天主要讨

Android 5.0 system_fonts.xml文件的解析过程

Android 5.0 system_fonts.xml文件的解析过程 首先看看看5.0 中familyset version="22" 的格式 20 <family name="sans-serif"> 21 <font weight="100" style="normal">Roboto-Thin.ttf</font> 22 <font weight="100"

Java获取路径方法&amp;相对路径读取xml文件方法

Java获取路径方法&相对路径读取xml文件方法 (1).request.getRealPath("/");//不推荐使用获取工程的根路径 (2).request.getRealPath(request.getRequestURI());//获取jsp的路径,这个方法比较好用,可以直接在servlet和jsp中使用 (3).request.getSession().getServletContext().getRealPath("/");//获取工程的根路径