我是靠谱客的博主 高大鼠标,最近开发中收集的这篇文章主要介绍详细介绍CMarkup类操作Xml总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、下载Markup.cpp 和 Markup.h

二、将此两个文件放置于工程目录下

三、在需要用到CMarkup的地方 #include "Markup.h"

当然VC中还需要配置一下环境

在VC6.0下:

a.在Markup.cpp的顶端加上 #include"stdafx.h" 或者

b.关闭Markup.cpp的预编译头设置,具体方法如下:

Project->Setting 弹出ProjectSetting对话框,在左边的文件树下选择Markup.cpp,然后在 "Settings for" 下拉框下选择 "All Configurations",选择 C/C++标签页,

接着在Category下拉框下选中 "Precompiled Headers"选项,选中下面的"Not Using Precompiled Headers." 单选按钮即可

CMarkup的基本使用:

例如要读取如下UserInfos.xml的内容

<?xml version="1.0" encoding="UTF-8" ?>   
 <UserInfos>  
  <UserInfo>  
   <name>WangYao</name>   
   <age>25</age>   
  </UserInfo>  
  <UserInfo>  
   <name>Hisin</name>   
   <age>27</age>   
  </UserInfo>  
 </UserInfos>
登录后复制

源代码如下:

CMarkup xml;  
bool    flag;  
  
//加载Xml文件  
flag = xml.Load("d:\UserInfos.xml");  
if (!flag)  
{  
    AfxMessageBox(TEXT("加载d:\UserInfos.xml失败,请检查"));  
    return;  
}  
  
//定位到Root Elem  
xml.ResetPos();  
flag = xml.FindElem("UserInfos");  //Root Elem为<UserInfos></UserInfos>  
if (!flag)  
{  
    return;  
}  
  
xml.IntoElem();   //进入根节点  
while(xml.FindElem(TEXT("UserInfo")))  
{  
    xml.IntoElem();   //进入<UserInfo></UserInfo>  
  
    //获取name节点数据  
    flag = xml.FindElem(TEXT("name"));  
    if (flag)  
    {  
        CString cstrName;  
        cstrName = xml.GetData();  
        AfxMessageBox(cstrName);  
    }  
  
    //获取age节点数据  
    xml.ResetMainPos();   //保证不管name节点和age节点的顺序如何,都能找到age节点  
    flag = xml.FindElem(TEXT("age"));  
    if (flag)  
    {  
        CString cstrAge;  
        cstrAge = xml.GetData();  
        AfxMessageBox(cstrAge);  
    }  
  
    xml.OutOfElem();  //跳出<UserInfo></UserInfo>  
}  
xml.OutOfElem();  //跳出根节点
登录后复制

当然实现同样的功能也可以不进入UserInfo节点,源码如下,请仔细对比

xml.IntoElem();   //进入根节点  
while(xml.FindElem(TEXT("UserInfo")))  
{  
    //获取name子节点数据  
    flag = xml.FindChildElem(TEXT("name"));  
    if (flag)  
    {  
        CString cstrName;  
        cstrName = xml.GetChildData();  
        AfxMessageBox(cstrName);  
    }  
  
    //获取age子节点数据  
    xml.ResetChildPos();   //保证不管name子节点和age子节点的顺序如何,都能找到age子节点  
    flag = xml.FindChildElem(TEXT("age"));  
    if (flag)  
    {  
        CString cstrAge;  
        cstrAge = xml.GetChildData();  
        AfxMessageBox(cstrAge);  
    }  
}  
xml.OutOfElem();  //跳出根节点
登录后复制

Tips:

1.IntoElem与OutOfElem方法应成对使用

2.关于重置xml的Pos的函数

ResetPosResets the current position to the start of the document
ResetMainPosResets the current main position to before the first sibling
ResetChildPosResets the current child position to before the first child

3.SavePos 与 RestorePos 复原xml Pos

SavePosSaves the current position with an optional string name using a hash map
RestorePosGoes to the position saved with SavePos

比如:

...
xml.SavePos(Text("abc"));
OpXml(xml);  //该函数可能会改变xml的Pos,则可以利用SavePos与RestorePos复原该函数执行前xml的Pos
xml.RestorePos(Text("abc"));
...
登录后复制

以上就是详细介绍CMarkup类操作Xml总结的详细内容,更多请关注靠谱客其它相关文章!

最后

以上就是高大鼠标为你收集整理的详细介绍CMarkup类操作Xml总结的全部内容,希望文章能够帮你解决详细介绍CMarkup类操作Xml总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(157)

评论列表共有 0 条评论

立即
投稿
返回
顶部