`
BlogDown
  • 浏览: 223993 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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文档。

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>
分享到:
评论

相关推荐

    vc中操作Xml--使用CMarkup类

    **CMarkup** 类是 **FirstObject** 公司提供的一个用于解析XML的C++类库,它可以简化在VC环境下对XML文档的操作。该类支持添加、删除、查找和修改XML文档中的元素与属性等功能。 ##### 下载及安装 - 最新版本:v...

    xml的操作类(CMarkup)

    `VC解析XML--使用CMarkup类解析XML.mht`可能是一个示例教程或代码演示,包含了如何在Visual C++环境中使用该类的详细步骤。 在实际开发中,使用`CMarkup`类可以大大简化XML处理的复杂性,提高代码的可读性和维护性...

    cmarkup 解析 xml

    VC解析XML--使用CMarkup类解析XML (一) 先讲一下XML中的物殊字符,手动填写时注意一下。 字符 字符实体 & &amp;或&#38;#38; ' &apos;或&#39; &gt; &gt;或&#62; ;或&#38;&#60; " &quot;或&#34; (二) CMarkup类的源...

    vc中操作Xml-使用CMarkup.pdf

    在阅读了给定的文件信息后,我们可以提炼出关于在Visual C++中使用CMarkup库操作XML的相关知识点。CMarkup是一个用于解析和操作XML的C++类库,它提供了一系列的接口来方便用户创建、编辑、查询和保存XML文档。下面是...

    vc中操作Xml-使用CMarkup[收集].pdf

    这里提到的CMarkup是一个轻量级的XML解析库,它提供了简单易用的API来读取、写入和操作XML文档。通过CMarkup,你可以方便地在VC++项目中进行XML数据的生成、查询和修改。 首先,我们来看如何使用CMarkup生成XML文件...

    xml解析库Markup90及教程

    提供的"VC解析XML--使用CMarkup类解析XML.doc"文档应该包含了更详尽的教程,覆盖了Markup90库的使用实例、常见问题和最佳实践。建议结合这个文档进行深入学习,以便更好地理解和应用Markup90。 6. 开发者注意事项 ...

    vc cmarkup 遍历 xml 树

    在本实例中,我们关注的是“vc cmarkup 遍历 xml 树”,这表明我们将讨论如何在Visual C++(VC6)中使用CMARKUP类来解析并遍历XML树结构。XML(eXtensible Markup Language)是一种用于存储和传输结构化数据的标准...

    XML解析(VC工具类CMarkup)

    2. **XML解析**:CMarkup能够解析XML文档并创建内部表示。解析后,可以通过FindElement、FindChildElement等方法遍历XML元素。例如,`if (m_xml.FindElement("root"))`会找到XML文档的根元素。 3. **元素操作**:...

    VC实现XML解析CMarkup

    1. **CMarkup类结构**:CMarkup类包含了多个成员变量,如m_strDoc(XML文档字符串)、m_iPos(当前解析位置)等,以及一系列方法,如MarkUp()(解析XML)、FindElement()(查找元素)等,这些方法提供了对XML文档的...

    XML解析 CMarkup类 c++

    解析XML后,可以通过遍历元素树来访问和修改数据。例如: ```cpp CMarkup markup; if (markup.SetDoc(xmlString)) { // xmlString是包含XML数据的字符串 if (markup.Root()) { while (markup.FindChild(...

    vc CMarkup缩进格式化xml

    `CMarkup`类是这个库的主要接口,它包含了解析XML文档、遍历XML节点、修改XML结构以及输出格式化XML等方法。例如,`Init()`方法用于初始化`CMarkup`对象,`SetDoc()`方法则用于加载XML文档内容。 XML解析过程中,`...

    VC使用Cmarkup生成、解析xml资料

    如果你希望使用微软的MSXML,CMarkup工程中CmarkupMSXML类全面的演示了通过EDOM来使用MSXML,并且它是以C++ COM语法开始。 下面列出了CMarkup的特征: 独立:不需要任何外部的XML组件。 小:编译到你的工程只是很小...

    VC++中利用CMarkup类对XML文件的操作

    在VC++编程环境中,处理XML文件时,CMarkup类是一个非常实用的工具。这个类库提供了方便的方法来操作XML文档,包括创建、读取、修改和保存XML数据。以下是关于如何利用CMarkup类进行XML文件操作的详细说明: 首先,...

    Cmarkup类——解析xml

    Cmarkup类是一个在VC++环境下用于解析XML文件的工具,它提供了一种简便的方式来操作XML文档,无需深入了解底层XML解析的复杂性。这个类库基于Microsoft的MSXML库,利用了MSXML3组件来实现XML解析功能。MSXML是微软...

    CMarkup markup 对vc中xml文件进行操作

    解析XML文件后,你可以使用CMarkup的各种成员函数来访问和修改DOM树。例如,`FindChild`用于查找特定的子元素,`GetElementText`获取元素的文本内容,而`SetElementText`则用于设置元素的文本。此外,`AddElement`和...

    c++ XML解析 CMarkup示例

    - `Init()`: 初始化CMarkup对象,准备解析XML。 - `SetDoc()`: 设置XML字符串或文件路径,开始解析。 - `FindElem()`:找到指定名称的标记。 - `GetChild() / GetNextSibling()`: 遍历标记的子元素或同级元素。 ...

    CMarkup class methods2.rar

    CMarkup的官方使用说明下载打包好文件。方便放到本地磁盘中查阅使用。...本文件是对VC解析XML文件-CMarkup的官方使用说明打包下载了,方便放到本地磁盘中查阅使用。对CMarkup进行了详细的分析介绍,需要的朋友参考下。

    VC6通过CMarkup类读取XML等文件的DEMO

    3. XML文档的结构和语法规则,这对于理解和解析XML至关重要。 4. 面向对象编程中的类和对象的使用。 总之,"VC6通过CMarkup类读取XML等文件的DEMO"是一个很好的学习资源,它可以帮助你在不依赖第三方库的情况下,...

Global site tag (gtag.js) - Google Analytics