www.pudn.com > ParseXMLX.rar > ParseXMLX.cpp


 
#include "ParseXMLX.h" 
 
string IntToStrX(int i) 
{ 
	stringstream ss; 
	ss << i; 
	return ss.str(); 
} 
 
int StrToIntX(const string& str) 
{ 
	int i; 
	stringstream ss; 
	ss<> i; 
	return i; 
} 
 
string DoubleToStrX(double d) 
{ 
	stringstream ss; 
	ss << d; 
	return ss.str(); 
} 
 
double StrToDoubleX(const string& str) 
{ 
	double d = 0; 
	stringstream ss; 
	ss<> d; 
	return d; 
} 
 
void XMLToSwapData(const string& xml, TSwapDataX* pSwapData) 
{ 
	if (pSwapData==NULL) return; 
 
	pSwapData->PinDatas.clear(); 
	size_t begin = xml.find(""); 
	size_t end = xml.find(""); 
	string strValue = xml.substr(begin+11, end-begin-11); 
	begin = strValue.find("objid"); 
	end = strValue.find("\"", begin+1); 
	if (begin!=-1&&end!=-1) 
	{ 
		begin = end; 
		end = strValue.find("\"", begin+1); 
		if (end!=-1) 
			pSwapData->ObjID = strValue.substr(begin+1, end-begin-1); 
	} 
 
	 
	unsigned int pinindex = 0; 
	TPinDataX pindata; 
	string strPin, strData; 
 
	string strToken = ""; 
		end = strValue.find(strToken); 
		if(end==-1)break; 
		strPin = strValue.substr(begin+6, end-begin-6); 
 
		//寻找pinid的值 
		begin = strPin.find("pinid"); 
		end = strPin.find("\"", begin+1); 
		if (begin!=-1&&end!=-1) 
		{ 
			begin = end; 
			end = strPin.find("\"", begin+1); 
			if (end!=-1) 
				pindata.PinID = StrToIntX(strPin.substr(begin+1, end-begin-1)); 
		} 
 
		//寻找datatype的值 
		begin = strPin.find("datatype"); 
		end = strPin.find("\"", begin+1); 
		if (begin!=-1&&end!=-1) 
		{ 
				begin = end; 
				end = strPin.find("\"", begin+1); 
				if (end!=-1) 
					pindata.DataType = StrToIntX(strPin.substr(begin+1, end-begin-1)); 
		} 
 
		//寻找arrsize的值 
		begin = strPin.find("arrsize"); 
		end = strPin.find("\"", begin+1); 
		if (begin!=-1&&end!=-1) 
		{ 
			begin = end; 
			end = strPin.find("\"", begin+1); 
			if (end!=-1) 
				pindata.ArrSize = StrToIntX(strPin.substr(begin+1, end-begin-1)); 
		} 
 
		//寻找dimsize的值 
		begin = strPin.find("dimsize"); 
		end = strPin.find("\"", begin+1); 
		if (begin!=-1&&end!=-1) 
		{ 
			begin = end; 
			end = strPin.find("\"", begin+1); 
			if (end!=-1) 
				pindata.DimSize = StrToIntX(strPin.substr(begin+1, end-begin-1)); 
		} 
 
		//寻找dimvalue的值 
		begin = strPin.find("dimvalue"); 
		end = strPin.find("\"", begin+1); 
		if (begin!=-1&&end!=-1) 
		{ 
			begin = end; 
			end = strPin.find("\"", begin+1); 
			if (end!=-1) 
				pindata.DimValue = StrToIntX(strPin.substr(begin+1, end-begin-1)); 
		} 
 
		//寻找真正的数据值 
		begin = strPin.find(""); 
		if (begin!=-1&&end!=-1)  
		{ 
			strData = strPin.substr(begin+6, end-begin-6); 
			unsigned int dataindex = 0; 
			strToken = "data0"; 
			begin = strData.find(strToken); 
			while (dataindexPinDatas.push_back(pindata); 
 
		++pinindex; 
		strToken = "PinDatas.size(); 
	for(unsigned int i=0;iPinDatas[i].PinID) + "\" "; 
		strXML = strXML + "datatype=\"" + IntToStrX(pSwapData->PinDatas[i].DataType) + "\" "; 
		strXML = strXML + "arrsize=\"" + IntToStrX(pSwapData->PinDatas[i].ArrSize) + "\" "; 
		strXML = strXML + "dimsize=\"" + IntToStrX(pSwapData->PinDatas[i].DimSize) + "\" "; 
		strXML = strXML + "dimvalue=\"" + IntToStrX(pSwapData->PinDatas[i].DimValue) + "\">\nPinDatas[i].Datas.size(); 
		for(unsigned int j=0;jPinDatas[i].Datas[j]) + "\" "; 
		} 
		strXML += ">\n\n"; 
		 
		strXML = strXML + "\n"; 
	} 
 
	strXML = "\n\ 
									 \n\ 
									 \n\ 
									 \n\ 
									 \n\ 
									 \n\ 
									 ObjID + "\">\n" + strXML + 			 
									"\n\ 
									\n\ 
									 \n\ 
									 \n\ 
									 \n\ 
									 \n\ 
									 \n\ 
									 "; 
 
	return strXML; 
} 
 
 
void XMLToProxyNode(const string& xml, TProxyNodeX* pProxyNode) 
{ 
	if(pProxyNode==NULL) return; 
	pProxyNode->Poses.clear(); 
	pProxyNode->Pins.clear(); 
 
} 
 
string ProxyNodeToXML(TProxyNodeX* pProxyNode) 
{ 
	if (pProxyNode==NULL) return ""; 
 
	string strXML = ""; 
	strXML += "<" + pProxyNode->ClassName + " "; 
	strXML = strXML + "nid=\"" + IntToStrX(pProxyNode->NID) + "\" "; 
	strXML = strXML + "width=\"" + IntToStrX(pProxyNode->Width) + "\" "; 
	strXML = strXML + "height=\"" + IntToStrX(pProxyNode->Height) + "\" "; 
	strXML = strXML + "shape=\"" + IntToStrX(pProxyNode->Shape) + "\" "; 
	strXML = strXML + "description=\"" + pProxyNode->Description + "\" "; 
	strXML = strXML + "icon=\"" + pProxyNode->Icon + "\">\n"; 
     
    strXML = strXML + "InCount) + "\" "; 
	strXML = strXML + "outcount=\"" + IntToStrX(pProxyNode->OutCount) + "\">\n"; 
 
	unsigned int pinsize = pProxyNode->Pins.size(); 
	for(unsigned int i=0;iPins[i].PinID) + "\" "; 
		strXML = strXML + "datatype=\"" + IntToStrX(pProxyNode->Pins[i].DataType) + "\" "; 
		strXML = strXML + "datacomplexity=\"" + IntToStrX(pProxyNode->Pins[i].DataComplexity) + "\" "; 
		strXML = strXML + "hint=\"" + pProxyNode->Pins[i].Hint + "\" "; 
 
		strXML += ">\n"; 
	} 
 
	strXML += "\n\n"; 
	unsigned int addrsize = pProxyNode->Poses.size(); 
	for(unsigned int i=0;iPoses[i].Address + "\" "; 
		strXML = strXML + "flag=\"" + IntToStrX(pProxyNode->Poses[i].Flag) + "\"> "; 
		strXML += "\n"; 
	} 
	strXML += "\n"; 
	strXML += "ClassName + ">\n"; 
	 
	strXML = "\n\ 
			 \n\ 
			 \n\ 
			 \n\ 
			 \n\ 
			 \n\ 
			 \n\ 
			 \n"  
			 + strXML + 			 
			 "\n\ 
			 \n\ 
			 \n\ 
			 \n\ 
			 "; 
	return strXML; 
}