在C++/MFC中利用CMarkup类对XML进行操作

本文详细介绍了如何在C++/MFC环境下使用CMarkup类进行XML文件的创建、解析、修改、添加、删除元素以及属性操作。通过实例展示了CMarkup的使用方法,包括创建XML声明、添加元素、解析文件、修改内容、添加和删除子元素,以及处理元素属性。文章适合XML初学者和需要处理XML的C++开发者。
摘要由CSDN通过智能技术生成

在C++/MFC中利用CMarkup类对XML进行操作

标签: 实用编程技术


一、什么是XML1

XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分。标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)、超文本标记语言(Hypertext Markup Language,HTML),并且最终演变成 XML。简单地说,XML是一种有特定格式的语言,这种语言可以精确的表示所记录的信息,最重要的是通用性很强,可以被多种软件或者系统按照语法格式来解析。

二、使用CMarkup类的一些准备

  1. 官网下载头文件Markup.h和源文件Markup.cpp.
  2. 在VC6.0或者VS中新建一个工程,此处笔者在VC6.0中新建了一个简单地控制台应用程序,并将其命名为CMarkupTest
  3. 将下载头文件和源文件Copy到该工程的根目录下,并且添加到工程中去。这里需要说明的是VC6.0由于和office2007版本及以上版本在Windows中有冲突,向工程添加文件会使VC6.0卡死并且闪退,可以用加载插件的方法解决该问题,网上方法很多,在此不赘述。
  4. 在CMarkuptest.cpp中包含头文件Markup.h
  5. 点击编译,竟然有错误!我们来看一下提示:

    fatal error C1010: unexpected end of file while looking for precompiled header directive

    这是添加文件到工程常见的错误,解决方法有两个:

    解决方案1: 在菜单栏进行设置,工程->设置->C/C++->分类:预编译的头文件,设置为第一项:不使用预补偿页眉

    解决方案2:在CMarkup.cpp文件开头添#include”stdafx.h”

    此处笔者使用解决方案2. 此时再编译,又提示了新的错误:

    error LNK2001: unresolved external symbol __endthreadex
    error LNK2001: unresolved external symbol __beginthreadex

    这个错误笔者以前在MFC中解析XML时并没有发生过,很可能是控制台应用程序没有包含应有的库而产生的。仔细观察提示的错误,未解决的外部符号__endthreadex/__beginthreadex,笔者猜测可能是解析XML时使用了多线程函数,这个好办,解决方法如下:
    工程->设置->C/C++->分类:Code Generation->Use run-time library: DebugMultithreaded

    点击编译,0 error,完成!

三、创建XML文件2

XML 文档的第一行可以是一个 XML 声明。这是文件的可选部分,它将文件识别为 XML 文件,有助于工具和人类识别 XML。可以将这个声明简单地写成 <?xml?>,或包含 XML 版本<?xml version="1.0"?>,甚至包含字符编码,比如针对 Unicode 的<?xml version="1.0" encoding="utf-8"?>

根元素

根元素的开始和结束标记用于包围XML文档的内容,一个文件只能有一个根元素。

子元素

一个文件可以拥有若干个子元素,并且子元素可以嵌套新的子元素。创建名称时可以使用英文字母、数字和特殊字符,比如下划线(_)。下面给出命名时需要注意的地方:

  • 元素名中不能出现空格
  • 名称只能以英文字母开始,不能是数字或符号。(在第一个字母之后就可以使用字母、数字或规定的符号,或它们的混合)。
  • 对大小写没有限制,但前后要保持一致,以免造成混乱。

每一个元素以开始标记开始,以结束标记结束,中间夹上该元素的内容或者子元素。例如我们现在创建一个XML文档,来表示学生和课程内容。具体如下:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
    <Math>
        <Advanced_Mathematics>classroom No.1</Advanced_Mathematics>
        <Mathematical_Analysis>classroom No.2</Mathematical_Analysis>
        <Linear_Algebra>classroom No.3</Linear_Algebra>
        <Probability_Theory>classroom No.4</Probability_Theory>
    </Math>
    <English/>
    <Student>Xiao_Ming</<
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值