递归、data to xml , xml to data

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);
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/wk201403010114/article/details/84975675
xml