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 += "" + pProxyNode->ClassName + ">\n";
strXML = "\n\
\n\
\n\
\n\
\n\
\n\
\n\
\n"
+ strXML +
" \n\
\n\
\n\
\n\
";
return strXML;
}