VC++ 用CMarkUp解析XML文件

1、获取CMarkUp.cpp和CmarkUp.h文件

首先到http://www.firstobject.com/dn_markup.htm链接下,下载Release 11.5 zip (579k)C++ source code for Linux, Mac, Windows,解压后里面是一个Test文件夹和Markup.cpp和Markup.h文件,将Markup.h和Markup .cpp拷贝并添加到工程中,第一次编译可能会出现预编译错误,解决的方法在Markup.cpp最前面include "stdafx.h",或者关闭预编译。

下面是CMarkup类的一些具体用法(转载自http://www.sqlite.com.cn/MySqlite/12/211.Html链接,经过自己验证通过):

1、生成UserInfo.xml,代码如下:

CMarkup xml;
xml.SetDoc("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
xml.AddElem("UserInfo");
xml.IntoElem();
xml.AddElem("UserID","luo");
xml.AddElem("UserID","lin");
xml.OutOfElem();
xml.Save("UserInfo.xml");

2、浏览特定元素 

2.1、遍历所有的UserID节点,代码如下所示:

CMarkup xml;
xml.Load("UserInfo.xml");
	
BOOL bFind = true;
xml.ResetMainPos();
while(xml.FindChildElem("UserID"))
{
	//此时接点还是父接点
	CString strTagName = _T("");
	CString strData = _T("");
		
	strTagName = xml.GetChildTagName();
	strData = xml.GetChildData();
}


2.2、另外一种调用方法,如下:

CMarkup xml;
xml.Load("UserInfo.xml");
BOOL bFind = true;
xml.ResetMainPos();
	
while (xml.FindChildElem("UserID"))
{
	xml.IntoElem();//进入当前主位置的下一级,当前的位置变为父位置
	CString strTagName = _T("");
	CString strData = _T("");
	strTagName = xml.GetTagName();
	strData = xml.GetData();
	TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
	xml.OutOfElem();//使当前父位置变成当前位置
}

2.3、再一种调用方法如下:

CMarkup xml;
	xml.Load("UserInfo.xml");

	xml.ResetMainPos();
	xml.FindElem(); //UserInfo
	xml.IntoElem();
  
	while (xml.FindElem("UserID"))
	{
		CString strTagName = _T("");
		CString strData = _T("");
		strTagName = xml.GetTagName();
		strData = xml.GetData();
		TRACE("\n---tagName:%s,Data:%s--\n",strTagName,strData);
	}
2.4、修改,把UserID为luo的标签,修改为flypigluo,代码如下:

BOOL bLoadXml = false;
CMarkup xml;
bLoadXml = xml.Load("UserInfo.xml");
if (bLoadXml)
{
	CString strUserID = _T("");
	xml.ResetMainPos();
	xml.FindElem();
	xml.IntoElem();
	while (xml.FindElem("UserID"))
	{
		strUserID = xml.GetData();
		if (strUserID=="luo")
		{
			xml.SetData(CString("flypig")+strUserID);
			xml.Save("UserInfo.xml");
			break;
		}
	}
}
2.5、 添在最后面(使用的是AddElem)

BOOL bLoadXml = false;
CMarkup xml;
bLoadXml = xml.Load("UserInfo.xml");
if (bLoadXml)
{
	xml.ResetMainPos();
	xml.FindElem();
	xml.IntoElem();
	xml.AddElem("UserID","luoluo");
	xml.OutOfElem();
	xml.Save("UserInfo.xml");
}
2.6、添加在最前面,使用InsertElem()函数

BOOL bLoadXml = false;
CMarkup xml;
bLoadXml = xml.Load("UserInfo.xml");
if (bLoadXml)
{
	xml.ResetMainPos();
	xml.FindElem();
	xml.IntoElem();
	xml.InsertElem("UserID","AddUserIDHead");
	xml.OutOfElem();
	xml.Save("UserInfo.xml");
}
2.7、删除某元素,使用的函数为RemoveChildElem()

CMarkup xml;
xml.Load("UserInfo.xml");
BOOL bFind = true;
xml.ResetMainPos();
	
while (bFind)
{
	bFind = xml.FindChildElem("UserID");
	if (bFind)
	{//此时接点还是父接点
	<span style="white-space:pre">	</span>CString strData = _T("");
		strData = xml.GetChildData();
			
		if (strData=="luo")
		{
			xml.RemoveChildElem();
			xml.Save("UserInfo.xml");
			break;
		}
	}
}





你可能感兴趣的:(VC++ 用CMarkUp解析XML文件)