C++使用Markup解析xml文件
作者:互联网
首先到官网 http://www.firstobject.com/dn_markup.htm 获取Markup.h和Markup.cpp
示例:
1.生成xml文件
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include"Markup.h"
using namespace std;
int main()
{
CMarkup xml;
xml.SetDoc("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
xml.AddElem((MCD_CSTR)"UserInfo"); //在当前主位置元素或最后兄弟位置之后增加一个元素
xml.IntoElem(); //进入当前主位置的下一级,当前的位置变为父位置。
xml.AddElem((MCD_CSTR)"UserID",(MCD_CSTR)"Jason");
xml.AddElem((MCD_CSTR)"UserID",(MCD_CSTR)"evil");
xml.OutOfElem(); //使当前父位置变成当前位置。
xml.Save((MCD_CSTR)"UserInfo.xml"); //可指定目录 将XML数据写入文件中
return 0;
}
2.浏览特定元素
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include"Markup.h"
using namespace std;
int main()
{
CMarkup xml;
xml.Load((MCD_CSTR)"UserInfo.xml");
BOOL bFind = true;
xml.ResetMainPos();//将当前主位置复位为第一个兄弟位置之前
while (xml.FindChildElem((MCD_CSTR)"UserID")) //定位到下一个子元素,匹配元素名或路径。
{
xml.IntoElem();//进入当前主位置的下一级,当前的位置变为父位置
CString strTagName = _T("");
CString strData = _T("");
strTagName = xml.GetTagName(); //得到主位置元素(或正在进行的指令的)标签名称
strData = xml.GetData(); // 得到当前主位置元素或节点的字符串值
//以下为了看输出结果把CString 转 char*类型
int len1 =WideCharToMultiByte(CP_ACP,0,strTagName,-1,NULL,0,NULL,NULL);
char ptagName[128];
WideCharToMultiByte(CP_ACP,0,strTagName,-1,ptagName,len1,NULL,NULL );
int len2 =WideCharToMultiByte(CP_ACP,0,strData,-1,NULL,0,NULL,NULL);
char pData[128];
WideCharToMultiByte(CP_ACP,0,strData,-1,pData,len2,NULL,NULL );
printf("\n-----tagName:%s,Data:%s\n",ptagName,pData);
xml.OutOfElem();//使当前父位置变成当前位置
}
system("pause");
return 0;
}
3.修改元素
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include"Markup.h"
using namespace std;
int main()
{
CMarkup xml;
BOOL bLoadXml = false;
bLoadXml = xml.Load((MCD_CSTR)"UserInfo.xml");
if( bLoadXml )
{
CString strUserID = _T("");
xml.ResetMainPos();
xml.FindElem(); //定位到下一个元素,可能和一个标签名或路径匹配。 也就是定位到UserID;
xml.IntoElem();
while (xml.FindElem((MCD_CSTR)"UserID"))
{
strUserID = xml.GetData();
if (strUserID=="Jason")
{
xml.SetData(CString("snake")); // 把UserID为Jason值的修改snake
xml.Save((MCD_CSTR)"UserInfo.xml");
break;
}
}
}
system("pause");
return 0;
}
4.添加元素,添加在最后面
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include"Markup.h"
using namespace std;
int main()
{
BOOL bLoadXml = false;
CMarkup xml;
bLoadXml = xml.Load((MCD_CSTR)"UserInfo.xml");
if (bLoadXml)
{
xml.ResetMainPos();
xml.FindElem();
xml.IntoElem();
xml.AddElem((MCD_CSTR)"UserID",(MCD_CSTR)"Jason");
xml.OutOfElem();
xml.Save((MCD_CSTR)"UserInfo.xml");
}
system("pause");
return 0;
}
5.添加元素到最前面,使用的InsertElem()函数
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include"Markup.h"
using namespace std;
int main()
{
BOOL bLoadXml = false;
CMarkup xml;
bLoadXml = xml.Load((MCD_CSTR)"UserInfo.xml");
if (bLoadXml)
{
xml.ResetMainPos();
xml.FindElem();
xml.IntoElem();
xml.InsertElem((MCD_CSTR)"UserID",(MCD_CSTR)"AddUserIDHead");
xml.OutOfElem();
xml.Save((MCD_CSTR)"UserInfo.xml");
}
system("pause");
return 0;
}
6.删除元素 使用的是RemoveChildElem
#include "stdafx.h"
#include<stdlib.h>
#include<iostream>
#include<string.h>
#include"Markup.h"
using namespace std;
int main()
{
CMarkup xml;
xml.Load((MCD_CSTR)"UserInfo.xml");
BOOL bFind = true;
xml.ResetMainPos();
while (bFind)
{
bFind = xml.FindChildElem((MCD_CSTR)"UserID");
if (bFind)
{
CString strData = _T("");
strData = xml.GetChildData();
if (strData==(MCD_CSTR)"snake")
{
xml.RemoveChildElem();
xml.Save((MCD_CSTR)"UserInfo.xml");
break;
}
}
}
system("pause");
return 0;
}
标签:xml,NULL,Markup,MCD,C++,UserInfo,CSTR,include 来源: https://blog.csdn.net/hallyz945/article/details/117851975