file-type

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

RAR文件

3星 · 超过75%的资源 | 下载需积分: 12 | 516KB | 更新于2025-03-09 | 120 浏览量 | 37 下载量 举报 收藏
download 立即下载
### CMarkup解析XML知识点总结 #### 1. XML特殊字符处理 在XML中,某些字符具有特殊意义,因此它们不能直接作为文本内容出现,必须用字符实体(Character Entities)进行转义。常见特殊字符及其对应字符实体如下: - &(和号):应使用`&amp;`或`&#38;`表示。 - '(单引号):应使用`&apos;`或`&#39;`表示。 - >(大于号):应使用`&gt;`或`&#62;`表示。 - <(小于号):应使用`&lt;`或`&#60;`表示。 - "(双引号):应使用`&quot;`或`&#34;`表示。 #### 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数据有着极其重要的意义。

相关推荐