经过今天尝试MFC解析XML串,也算有了不少收获,总结一下。
我是使用的CMarkup类对XML进行操作。
CMarkup好象都是先从一个xml文件里面把内容读出来,再进行解析,搞得我恨不得要把我的CString写到xml文件里面再取出来了。
如果需要直接读取CString,可以直接用
CMarkup::SetDoc方法。
最后其他的方法转载别人的使用例子,写得很全。
来自http://hi.baidu.com/yxifu/blog/item/fa1569225bda52a44623e8f0.html
(一)先讲一下XML中的物殊字符,手动填写时注意一下。
字符字符实体
&&或&
''或'
>>或>
<<或&<
""或"
(二)CMarkup类的源代码。
这是目前的最新版本;
这是官网示例文件,取出里面的Markup.cpp和Markup.h,导入你的工程里面,CMarkup类就可以用了;
下载地址:http://www.firstobject.com/Markup83.zip
(三)创建一个XML文档。
CMarkupxml;
xml.AddElem("ORDER");
xml.AddChildElem("ITEM");
xml.IntoElem();
xml.AddChildElem("SN","132487A-J");
xml.AddChildElem("NAME","crankcasing");
xml.AddChildElem("QTY","1");
xml.Save("c://UserInfo.xml");
效果如下:
<ORDER>
<ITEM>
<SN>132487A-J</SN>
<NAME>crankcasing</NAME>
<QTY>1</QTY>
</ITEM>
</ORDER>
(四)浏览特定元素
CMarkupxml;
xml.Load("UserInfo.xml");
while(xml.FindChildElem("ITEM"))
{
xml.IntoElem();
xml.FindChildElem("SN");
CStringcsSN=xml.GetChildData();
xml.FindChildElem("QTY");
intnQty=atoi(xml.GetChildData());
xml.OutOfElem();
}
(五)增加元素和属性
添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。
CMarkupxml;
xml.Load("c://UserInfo.xml");
xml.AddElem("ORDER");
xml.IntoElem();//进入ORDER
xml.AddElem("ITEM");
xml.IntoElem();//进入ITEM
xml.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","JohnSmith");//添加元素
xml.AddElem("TEL","555-1234");//添加元素
xml.Save("c://UserInfo.xml");
效果如下:
<ORDER>
<ITEM>
<SN>132487A-J</SN>
<NAME>crankcasing</NAME>
<QTY>1</QTY>
</ITEM>
<ITEM>
<SN>4238764-A</SN>
<NAME>bearing</NAME>
<QTY>15</QTY>
</ITEM>
<SHIPMENT>
<POCtype="non-emergency">
<NAME>JohnSmith</NAME>
<TEL>555-1234</TEL>
</POC>
</SHIPMENT>
</ORDER>
(六)修改元素和属性
如将POC中的属性type改成:change;
元素TEL改成:123456789
CMarkupxml;
if(xml.Load("UserInfo.xml"))
{
CStringstrUserID=_T("");
xml.ResetMainPos();
if(xml.FindChildElem("SHIPMENT"))
{
xml.IntoElem();
if(xml.FindChildElem("POC"))
{
xml.IntoElem();
CStringstr_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的项目。
CMarkupxml;
if(xml.Load("UserInfo.xml"))
{
CStringstrUserID=_T("");
xml.ResetMainPos();
if(xml.FindChildElem("ITEM"))
{
xml.IntoElem();
CStringstr_sn;
xml.FindChildElem("SN");
str_sn=xml.GetChildData();
if(str_sn=="132487A-J")
{
xml.RemoveElem();
xml.Save("UserInfo.xml");
}
}
}
乐吾天修改:
进过测试,上述有问题,在重新插入一个元素的时候,有问题,不是使用方法AddElem,而是使用FindElem,如下:
(五)增加元素和属性
添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。
CMarkupxml;
xml.Load("c://UserInfo.xml");
xml.FindElem("ORDER"); //vc6.0里面,此处要进行修改,不是使用xml.AddElem("ORDER");
xml.IntoElem();//进入ORDER
xml.AddElem("ITEM");
xml.IntoElem();//进入ITEM
xml.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","JohnSmith");//添加元素
xml.AddElem("TEL","555-1234");//添加元素
xml.Save("c://UserInfo.xml");
效果如下:
<ORDER>
<ITEM>
<SN>132487A-J</SN>
<NAME>crankcasing</NAME>
<QTY>1</QTY>
</ITEM>
<ITEM>
<SN>4238764-A</SN>
<NAME>bearing</NAME>
<QTY>15</QTY>
</ITEM>
<SHIPMENT>
<POCtype="non-emergency">
<NAME>JohnSmith</NAME>
<TEL>555-1234</TEL>
</POC>
</SHIPMENT>
</ORDER>
分享到:
相关推荐
**CMarkup** 类是 **FirstObject** 公司提供的一个用于解析XML的C++类库,它可以简化在VC环境下对XML文档的操作。该类支持添加、删除、查找和修改XML文档中的元素与属性等功能。 ##### 下载及安装 - 最新版本:v...
`VC解析XML--使用CMarkup类解析XML.mht`可能是一个示例教程或代码演示,包含了如何在Visual C++环境中使用该类的详细步骤。 在实际开发中,使用`CMarkup`类可以大大简化XML处理的复杂性,提高代码的可读性和维护性...
VC解析XML--使用CMarkup类解析XML (一) 先讲一下XML中的物殊字符,手动填写时注意一下。 字符 字符实体 & &或&#38; ' '或' > >或> ;或&< " "或" (二) CMarkup类的源...
在阅读了给定的文件信息后,我们可以提炼出关于在Visual C++中使用CMarkup库操作XML的相关知识点。CMarkup是一个用于解析和操作XML的C++类库,它提供了一系列的接口来方便用户创建、编辑、查询和保存XML文档。下面是...
这里提到的CMarkup是一个轻量级的XML解析库,它提供了简单易用的API来读取、写入和操作XML文档。通过CMarkup,你可以方便地在VC++项目中进行XML数据的生成、查询和修改。 首先,我们来看如何使用CMarkup生成XML文件...
提供的"VC解析XML--使用CMarkup类解析XML.doc"文档应该包含了更详尽的教程,覆盖了Markup90库的使用实例、常见问题和最佳实践。建议结合这个文档进行深入学习,以便更好地理解和应用Markup90。 6. 开发者注意事项 ...
在本实例中,我们关注的是“vc cmarkup 遍历 xml 树”,这表明我们将讨论如何在Visual C++(VC6)中使用CMARKUP类来解析并遍历XML树结构。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准...
2. **XML解析**:CMarkup能够解析XML文档并创建内部表示。解析后,可以通过FindElement、FindChildElement等方法遍历XML元素。例如,`if (m_xml.FindElement("root"))`会找到XML文档的根元素。 3. **元素操作**:...
1. **CMarkup类结构**:CMarkup类包含了多个成员变量,如m_strDoc(XML文档字符串)、m_iPos(当前解析位置)等,以及一系列方法,如MarkUp()(解析XML)、FindElement()(查找元素)等,这些方法提供了对XML文档的...
解析XML后,可以通过遍历元素树来访问和修改数据。例如: ```cpp CMarkup markup; if (markup.SetDoc(xmlString)) { // xmlString是包含XML数据的字符串 if (markup.Root()) { while (markup.FindChild(...
`CMarkup`类是这个库的主要接口,它包含了解析XML文档、遍历XML节点、修改XML结构以及输出格式化XML等方法。例如,`Init()`方法用于初始化`CMarkup`对象,`SetDoc()`方法则用于加载XML文档内容。 XML解析过程中,`...
如果你希望使用微软的MSXML,CMarkup工程中CmarkupMSXML类全面的演示了通过EDOM来使用MSXML,并且它是以C++ COM语法开始。 下面列出了CMarkup的特征: 独立:不需要任何外部的XML组件。 小:编译到你的工程只是很小...
在VC++编程环境中,处理XML文件时,CMarkup类是一个非常实用的工具。这个类库提供了方便的方法来操作XML文档,包括创建、读取、修改和保存XML数据。以下是关于如何利用CMarkup类进行XML文件操作的详细说明: 首先,...
Cmarkup类是一个在VC++环境下用于解析XML文件的工具,它提供了一种简便的方式来操作XML文档,无需深入了解底层XML解析的复杂性。这个类库基于Microsoft的MSXML库,利用了MSXML3组件来实现XML解析功能。MSXML是微软...
解析XML文件后,你可以使用CMarkup的各种成员函数来访问和修改DOM树。例如,`FindChild`用于查找特定的子元素,`GetElementText`获取元素的文本内容,而`SetElementText`则用于设置元素的文本。此外,`AddElement`和...
- `Init()`: 初始化CMarkup对象,准备解析XML。 - `SetDoc()`: 设置XML字符串或文件路径,开始解析。 - `FindElem()`:找到指定名称的标记。 - `GetChild() / GetNextSibling()`: 遍历标记的子元素或同级元素。 ...
CMarkup的官方使用说明下载打包好文件。方便放到本地磁盘中查阅使用。...本文件是对VC解析XML文件-CMarkup的官方使用说明打包下载了,方便放到本地磁盘中查阅使用。对CMarkup进行了详细的分析介绍,需要的朋友参考下。
3. XML文档的结构和语法规则,这对于理解和解析XML至关重要。 4. 面向对象编程中的类和对象的使用。 总之,"VC6通过CMarkup类读取XML等文件的DEMO"是一个很好的学习资源,它可以帮助你在不依赖第三方库的情况下,...