
使用CMarkup类在VC中高效解析XML文件

### CMarkup解析XML知识点总结
#### 1. XML特殊字符处理
在XML中,某些字符具有特殊意义,因此它们不能直接作为文本内容出现,必须用字符实体(Character Entities)进行转义。常见特殊字符及其对应字符实体如下:
- &(和号):应使用`&`或`&`表示。
- '(单引号):应使用`'`或`'`表示。
- >(大于号):应使用`>`或`>`表示。
- <(小于号):应使用`<`或`<`表示。
- "(双引号):应使用`"`或`"`表示。
#### 2. CMarkup类概览
CMarkup是一个用于解析和操作XML文档的C++类库。通过引入CMarkup类,开发者能够方便地处理XML文档,包括创建、读取、修改和删除XML节点及其属性。CMarkup类通过简化接口隐藏了底层DOM或SAX解析器的复杂性。
#### 3. CMarkup类使用方法
- **创建XML文档**
使用CMarkup类可以方便地创建XML文档结构。首先创建CMarkup实例,然后使用AddElem和AddChildElem方法添加元素,最后使用Save方法将XML保存到文件。
示例代码:
```cpp
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");
```
- **浏览特定元素**
加载XML文档后,可以使用FindChildElem遍历特定元素。使用IntoElem进入元素内部,使用GetChildData获取元素数据。
示例代码:
```cpp
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方法可以在XML文档末尾添加元素,而InsertElem则用于在最前面添加。属性的添加可以通过SetAttrib方法实现。
示例代码:
```cpp
CMarkup xml;
xml.Load("c:\\UserInfo.xml");
xml.AddElem("ORDER");
xml.IntoElem();
xml.AddElem("ITEM");
xml.IntoElem();
xml.AddElem("SN", "4238764-A");
xml.AddElem("NAME", "bearing");
xml.AddElem("QTY", "15");
xml.OutOfElem();
xml.AddElem("SHIPMENT");
xml.IntoElem();
xml.AddElem("POC");
xml.SetAttrib("type", "non-emergency");
xml.IntoElem();
xml.AddElem("NAME", "John Smith");
xml.AddElem("TEL", "555-1234");
xml.Save("c:\\UserInfo.xml");
```
- **修改元素和属性**
通过CMarkup类可以对XML文档中的元素和属性进行修改。使用GetAttrib获取属性,SetAttrib设置新值。使用GetData获取元素数据,SetData设置新数据。
示例代码:
```cpp
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;
}
}
}
}
```
- **删除元素**
删除操作可以通过CMarkup类的RemoveElem方法实现。首先定位到目标元素,确认无误后执行删除并保存更改。
示例代码:
```cpp
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");
}
}
}
```
#### 4. CMarkup类的源代码和文件说明
CMarkup类的源代码文件包括`Markup.cpp`和`Markup.h`。通过将这两个文件加入到工程中,即可在项目里使用CMarkup类的功能。此外,压缩文件包`Markup112.zip`包含所需的所有文件,需要解压后才能正常使用。
#### 5. 注意事项
使用CMarkup类操作XML文件时,应注意以下几个方面:
- 确保正确使用编码,避免乱码问题。
- 在进行读写操作时,应注意线程安全问题。
- 在进行元素或属性的查找和修改时,应确保路径正确且元素存在。
- 删除元素之前,确保其不会导致数据丢失或其他副作用。
- 在保存文件时,确保有正确的权限,避免写入错误或安全风险。
#### 结语
通过以上知识点,我们可以看出CMarkup类是一个功能强大的XML处理工具,它简化了XML的解析和构造过程,使得开发者可以更专注于业务逻辑的实现。掌握CMarkup类的使用,对于处理XML数据有着极其重要的意义。
相关推荐








y2001b
- 粉丝: 1
最新资源
- 深入解析ACCP4.0 S1测试题核心要点
- JSP文件通过过滤器生成静态页面的方法
- RegexBuddy:正则表达式工具的极致体验
- C#泛型列表List<T>使用示例解析
- JAVA文件上传功能实现代码详解
- 掌握Atl编程:附带完整示例源代码解析
- 多系统需求规格说明书实例精华汇总
- C#开发的QQ聊天及记事本工具教程分享
- C#多线程数据采集器源码解析
- Java书籍文档压缩包解析
- 详解电池容量计算方法与技巧
- 全面解析DOS命令集及配套帮助手册下载
- ASP.NET透视表控件实现多维数据分析与展示
- 局域网聊天工具MyQQ代码实现与功能介绍
- Java Applet程序案例:实例编程与文件整合解析
- JspSmartUpload文件上传组件深入解析
- C#图片格式转换小工具应用实例
- H8/3048f录音播放系统源码分析
- EmpireCMS5:简化建站流程的高效CMS解决方案
- Tomcat插件V31Beta版发布:新功能概览与升级指南
- 谷歌金山词霸:跨平台翻译软件的便捷体验
- Spring框架2.5版本全部开发包整理下载
- MQSeries编程指南:多语言开发与消息处理
- .NET-C#队列操作示例教程:最小限制深入解析