QuickData.CQDSystem system = new QuickData.CQDSystem();
XmlDocument docR = new XmlDocument();
/// <summary>
/// 转换文件为XML
/// </summary>
/// <param name="fileName">要转换的文件的名字</param>
public void TransformFile(string fileName)
{
//下载文件
string path = System.Environment.CurrentDirectory + "//data//" + fileName + ".data";
system.Init(path);
system.Load();
//获得数据节点
QuickData.CQDDataCol root = system.dataCol;
XmlElement eR = docR.CreateElement("root");
docR.AppendChild(eR);
root.LoadSelfChild();
if (root != null)
{
if (root.refBrother != null)
SaveNode(root.refBrother, docR, eR);
if (root.refChild != null)
SaveNode(root.refChild, docR, eR);
}
docR.Save(System.Environment.CurrentDirectory + "//data//" + fileName + ".xml");//System.Environment.CurrentDirectory
// TransformFileToData("tmpMsg");
}
public void SaveNode(QuickData.CQDNode node, XmlDocument doc, XmlElement father)
{
node.LoadSelfChild();
//1 保存这个节点
// 1)创建一个xml节点 this xml node
XmlElement xmlElement = doc.CreateElement("node");
// 2) 把节点数据保存到到xml节点中
xmlElement.SetAttribute("nodeName", node.refSystem.GetStringByIndex(node.nodeNameIndex));
xmlElement.SetAttribute("paramNum", node.GetCQParam().Count.ToString());
for (int i = 0; i < node.GetCQParam().Count; i++)
{
xmlElement.SetAttribute("valueType" + i.ToString(), node.GetCQParam()[i].valueType.ToString());
xmlElement.SetAttribute("nodeNameStr" + i.ToString(), node.refSystem.GetStringByIndex(node.GetCQParam()[i].nodeNameStrIndex));
xmlElement.SetAttribute("value" + i.ToString(), node.GetCQParam()[i].GetStr());
}
// 3)把xml节点挂接好
father.AppendChild(xmlElement);//.ParentNode
//2 遍历下一个
// 1)遍历兄弟节点(递归调用) father
if (node.refBrother != null)
SaveNode(node.refBrother, doc, father);
//// 2)遍历自己的子节点(递归调用)this xml node
if (node.refChild != null)
SaveNode(node.refChild, doc, xmlElement);
}
XmlDocument xml;
/// <summary>
/// 转换文件为DATA
/// </summary>
/// <param name="fileName"></param>
public void TransformFileToData(string fileName)
{
//读取文件
string FilePath = System.Environment.CurrentDirectory + "//data//" + fileName + ".xml";
xml = new XmlDocument();
xml.Load(FilePath);
QuickData.CQDSystem system = new QuickData.CQDSystem();
string path = System.Environment.CurrentDirectory + "\\data\\" + fileName + ".data";
system.Init(path, true);
XmlNode rootNode = xml.SelectSingleNode("root");
foreach (XmlNode xmlchild in rootNode.ChildNodes)
{
ChildNode(xmlchild, null, system);
}
system.UpdateSave();
system.Close();
}
public void ChildNode(XmlNode XmlNode, QuickData.CQDDataNode fatherData, QuickData.CQDSystem system)
{
//reset frame
QuickData.CQDDataNode n = system.CreateNode(fatherData, "", null, null);
//save self data..
//获得paramNum的值
XmlElement e = XmlNode as XmlElement;
int number = (int.Parse)(e.GetAttribute("paramNum"));
for (int i = 0; i < number; i++)
{
QuickData.eQDValueType value = (QuickData.eQDValueType)((int.Parse)(e.GetAttribute("valueType" + i.ToString())));
string paramName = e.GetAttribute("nodeNameStr" + i.ToString());
string paramValueStr = e.GetAttribute("value" + i.ToString());
switch (value)
{
case QuickData.eQDValueType.Int:
n.AddParam(paramName, byte.Parse(paramValueStr));
break;
case QuickData.eQDValueType.Float:
n.AddParam(paramName, float.Parse(paramValueStr));
break;
case QuickData.eQDValueType.Long:
n.AddParam(paramName, long.Parse(paramValueStr));
break;
case QuickData.eQDValueType.Str:
n.AddParam(paramName, paramValueStr);
break;
case QuickData.eQDValueType.Char:
n.AddParam(paramName, char.Parse(paramValueStr));
break;
case QuickData.eQDValueType.Byte:
n.AddParam(paramName, byte.Parse(paramValueStr));
break;
case QuickData.eQDValueType.Double:
n.AddParam(paramName, double.Parse(paramValueStr));
break;
}
//遍历子节点
var childeList = e.ChildNodes;
if (childeList != null)
{
foreach (XmlNode ff in childeList)
ChildNode(XmlNode, n, system);
}
}
}