VC解析XML--使用CMarkup类解析XML

 经过今天尝试MFC解析XML串,也算有了不少收获,总结一下。
         我是使用的CMarkup类对XML进行操作。
         
         CMarkup好象都是先从一个xml文件里面把内容读出来,再进行解析,搞得我恨不得要把我的CString写到xml文件里面再取出来了。
         如果需要直接读取CString,可以直接用

         CMarkup::SetDoc方法。
         最后其他的方法转载别人的使用例子,写得很全。
来自http://hi.baidu.com/yxifu/blog/item/fa1569225bda52a44623e8f0.html

(一) 先讲一下XML中的物殊字符,手动填写时注意一下。

字符                  字符实体
&                      &或&
'                      '或'
>                      >或>
<                      &lt;或&<
"                       &quot;或"

(二) CMarkup类的源代码。

这是目前的最新版本;

这是官网示例文件,取出里面的Markup.cpp和Markup.h,导入你的工程里面,CMarkup类就可以用了;

下载地址:http://www.firstobject.com/Markup83.zip

(三) 创建一个XML文档。

CMarkup xml;
xml.AddElem( "ORDER" );
xml.AddChildElem( "ITEM" );
xml.IntoElem();
xml.AddChildElem( "SN", "132487A-J" );
xml.AddChildElem( "NAME", "crank casing" );
xml.AddChildElem( "QTY", "1" );
xml.Save("c:\\UserInfo.xml");

效果如下:

<ORDER><ITEM><SN>132487A-J</SN><NAME>crank casing</NAME><QTY>1</QTY></ITEM></ORDER>
(四) 浏览特定元素
CMarkup xml;
xml.Load("UserInfo.xml");
while ( xml.FindChildElem("ITEM") ) {xml.IntoElem();xml.FindChildElem( "SN" );CString csSN = xml.GetChildData();xml.FindChildElem( "QTY" );int nQty = atoi( xml.GetChildData() );xml.OutOfElem(); }
(五)增加元素和属性
添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。
CMarkup xml;
xml.Load("c:\\UserInfo.xml");
xml.AddElem( "ORDER" );
xml.IntoElem(); // 进入 ORDER



    xml.AddElem( "ITEM" );xml.IntoElem(); // 进入 ITEMxml.AddElem( "SN", "4238764-A" ); //添加元素xml.AddElem( "NAME", "bearing" );//添加元素xml.AddElem( "QTY", "15" );//添加元素xml.OutOfElem(); // 退出 ITEM 
xml.AddElem( "SHIPMENT" );
xml.IntoElem(); // 进入 SHIPMENT
xml.AddElem( "POC" );//添加元素
xml.SetAttrib( "type", "non-emergency");//添加属性
xml.IntoElem(); // 进入 POC
xml.AddElem( "NAME", "John Smith");//添加元素
xml.AddElem( "TEL", "555-1234");//添加元素
xml.Save("c:\\UserInfo.xml");

 

效果如下:

<ORDER><ITEM><SN>132487A-J</SN><NAME>crank casing</NAME><QTY>1</QTY></ITEM><ITEM><SN>4238764-A</SN><NAME>bearing</NAME><QTY>15</QTY></ITEM><SHIPMENT><POC type="non-emergency"><NAME>John Smith</NAME><TEL>555-1234</TEL></POC></SHIPMENT></ORDER>

(六) 修改元素和属性

如将POC中的属性type改成:change;

元素TEL改成:123456789

       CMarkup xml;
 if (xml.Load("UserInfo.xml"))
 {
  CString strUserID = _T("");
  xml.ResetMainPos();
  if (xml.FindChildElem("SHIPMENT"))
  {
   xml.IntoElem();
   if (xml.FindChildElem("POC"))
   {
    xml.IntoElem();
    CString str_type=xml.GetAttrib("type");
    MessageBox(str_type);
    xml.SetAttrib("type","change");
    strUserID = xml.GetData();
    
    if (xml.FindChildElem("TEL"))
    {
     xml.IntoElem();
     xml.SetData("123456789");
     xml.Save("UserInfo.xml");
     return;
    }
   }
  }
 }

(七)删除元素:

删除SN=132487A-J的项目。

CMarkup xml;
 if (xml.Load("UserInfo.xml"))
 {
  CString strUserID = _T("");
  xml.ResetMainPos();
  if (xml.FindChildElem("ITEM"))
  {
   xml.IntoElem();
   CString str_sn;
   xml.FindChildElem("SN");
   str_sn=xml.GetChildData();
   if(str_sn=="132487A-J")
   {
    xml.RemoveElem();
    xml.Save("UserInfo.xml");
   }
  }
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB精华总结

概述 MongoDB是属于文档型的NoSQL数据库&#xff0c;也就是文档数据库。文档数据库区别于传统的其它数据库&#xff0c;它是用来管理文档。在传统的数据库中&#xff0c;信息被分割成离散的数据段&#xff0c;而在文档数据库中&#xff0c;文档是处理信息的基本单位&#xff0c…

认清性能问题

本文翻译自 Thinking Clearly About Performance 这是我三年前读到的一篇关于性能问题的好文&#xff0c;读完后还觉不过瘾&#xff0c;怕理解的不够遂又翻译了一遍&#xff0c;这也是当年我的第一次翻译。 这几年来每次碰到性能问题&#xff0c;我都会想起这篇文章&#xff0c…

字节也开始缩招了...

阅读本文大概需要6分钟。最近和一个字节技术总监聊天&#xff0c;得知他们公司居然也开始缩招了。这真让人感到意外&#xff0c;毕竟头条这些年是以极速扩张而闻名。搜了搜新闻还真是&#xff0c;这也意味着互联网行业最后一个坚挺的大户也在开源节流了。最近互联网行业的情况真…

实现打字效果

摘自一个表白网站的效果。 方法&#xff1a; substr() 可在字符串中抽取从 第一个参数表示从指定的下标&#xff0c;第二个参数表示抽取指定数目的字符。 indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置&#xff0c;两个参数&#xff0c;第一位指定的字符串&…

php优化-》常用到的部分优化

1.循环内部尽可能不要声明变量&#xff1b; 2.在可以用PHP内部字符串操作函数的情况下&#xff0c;尽量不要用正则表达式&#xff1b; 3.foreach效率更高&#xff0c;尽量用foreach代替while和for循环&#xff1b; 4.用单引号替代双引号引用字符串&#xff1b; 5.尽量的少进行文…

简述:分布式CAP理论和BASE理论

目录 一、什么是CAP&#xff1f; Consistency (一致性)&#xff1a; Availability (可用性): Partition Tolerance (分区容错性): 二、取舍策略 三、Base理论 1、基本可用 2、软状态 3、最终一致性 四、常见产品 Ereka Zookeeper 五、总结 一、什么是CAP&#xf…

WinForm(四)一种实现登录的方式

首先声明&#xff0c;这只是一种登录方式&#xff0c;并不是最好的方式&#xff0c;用这个例子为了说明登录窗体和Application的关系。在登录前&#xff0c;定义了用户实体&#xff0c;然后是一个通用的类&#xff0c;存放进程中当前登录的用户&#xff0c;所以CurrentUser是静…

Java多线程4:synchronized锁机制

脏读 一个常见的概念。在多线程中&#xff0c;难免会出现在多个线程中对同一个对象的实例变量进行并发访问的情况&#xff0c;如果不做正确的同步处理&#xff0c;那么产生的后果就是"脏读"&#xff0c;也就是取到的数据其实是被更改过的。 按照正常来看应该打印&quo…

mysql 日期时间类型 自动转型 及 运算

日期时间类型自动转型 -- now()、字符串、数字转datetime类型 create table t(dt datetime);insert into t values(now());insert into t values(2007-9-3 12:10:10);insert into t values(2007/9/3 121010);insert into t values(2007#9#3 121010);insert into t values(20079…

.NET Community Toolkit 8.0.0 版本发布

.NET 社区工具包&#xff08;.NET Community Toolkit &#xff09;现已发布 8.0.0 版&#xff01;.NET 社区工具包是一组适用于所有 .NET 开发人员&#xff0c;且与任何特定 UI 平台无关的帮助程序和 API。该工具包由 Microsoft 维护和发布&#xff0c;是 .NET 基金会的一部分&…

SpringData JPA、Hibernate、Mybatis三者的区别

目录 1.ORM 考虑 SpringData JPA Hibernate MyBatis 2.业务查询的区别 Spring Data JPA Hibernate Mybatis 3.可拓展性 Spring Data JPA Hibernate Mybatis 4.对缓存 Spring Data JPA Hibernate Mybatis 5.难度性 Spring Data JPA Hibernate Mybatis 总述…

1、内存

程序为什么需要内存 程序运行的目的&#xff1a;程序运行是为了得到一定的结果&#xff0c;程序运行其实是在做一系列的数据计算&#xff0c;所以&#xff1a;程序代码数据&#xff1b;程序运行的目的不外乎2个&#xff1a;过程、结果&#xff1b; 用函数来类比&#xff1a;…

Map 遍历取值及jstl的取值

Map 遍历取值及jstl的取值 学习了&#xff1a;http://blog.csdn.net/yanjiaye520/article/details/17354239 1、Java map的便利取值 Java代码 收藏代码 Map<String,String> map new HashMap<String,String>(); map.put("key1", "value1");…

基于CAP组件实现补偿事务与幂等性保障

【.NET Core】| 总结/Edison Zhou1补偿事务和幂等性在微服务架构下&#xff0c;我们会采用异步通信来对各个微服务进行解耦&#xff0c;从而我们会用到消息中间件来传递各个消息。 补偿事务某些情况下&#xff0c;消费者需要返回值以告诉发布者执行结果&#xff0c;以便于发布者…

Docker与k8s

前言 随着k8s 作为容器编排解决方案变得越来越流行&#xff0c;有些人开始拿 Docker 和 k8s进行对比&#xff0c;不禁问道&#xff1a;Docker 不香吗&#xff1f; k8s 是kubernets的缩写&#xff0c;’8‘代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手&#xff…

Linux下启动tomcat报java.lang.OutOfMemoryError: PermGen space

2019独角兽企业重金招聘Python工程师标准>>> 一、错误信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav…

Redis安装[Windows]

一. redis下载地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads 根据需要的下载对应版本*.zip即可.(我这里是win7x64) 二.使用 1. 下载之后解压到你相应的目录下: 1 文件介绍&#xff1a; 2 redis-benchmark.exe #基准测试 3 redis-check-aof.e…

简练软考知识点整理-项目启动过程组

启动过程组包含定义一个新项目或现有项目的一个新阶段&#xff0c;授权开始该项目或阶段的一组过程。在启动过程中&#xff0c;定义初步范围和落实初步财务资源&#xff0c;识别那些将相互作用并影响项目总体结果的内外部干系人&#xff0c;选定项目经理&#xff08;如果尚未安…

在 ASP.NET Core 中上传文件

简介文件上传是指将媒体文件&#xff08;本地文件或网络文件&#xff09;从客户端上传至服务器存储。ASP.NET Core 支持使用缓冲的模型绑定&#xff08;针对较小文件&#xff09;和无缓冲的流式传输&#xff08;针对较大文件&#xff09;上传一个或多个文件。缓冲和流式传输是上…

Paxos算法详解

Paxos、Raft分布式一致性算法应用场景一文讲述了分布式一致性问题与分布式一致性算法的典型应用场景。作为分布式一致性代名词的Paxos算法号称是最难理解的算法。本文试图用通俗易懂的语言讲述Paxos算法。 一、Paxos算法背景 Paxos算法是Lamport宗师提出的一种基于消息传递的分…