/// <summary> /// 创建XML到文档并调用SiSolver生成阻抗报告 /// </summary> private void CreateXmlDoc() { //1、创建XML文档实例 XmlDocument xmldoc = new XmlDocument(); string version = "1.0"; string encoding = "UTF-8"; string standalone = "yes"; //2、创建文档声明 XmlDeclaration dec = xmldoc.CreateXmlDeclaration(version, encoding, standalone); xmldoc.AppendChild(dec); //3、创建文档元素 //Doc节点 XmlElement rootNode = xmldoc.CreateElement("Document"); //一级 节点设置属性 try { int length = attrDocument.Length; Dictionary <string, string> dictDocument = new Dictionary <string, string>(); string[] attrDocument_values = new string[length]; string[] attrDocument_keys = new string[length]; GetCustomer(); dictDocument.Add("Dev_Owner", "SISOLVER"); dictDocument.Add("Fab", "FOUNDERPCBF5"); dictDocument.Add("Version", "1.0"); dictDocument.Add("Project_Name", "Test"); dictDocument.Add("Project_Ver", "A0"); dictDocument.Add("Project_Designer", "SISOLVER"); dictDocument.Add("Date", DateTime.Now.ToString()); dictDocument.Add("Layer_Count", jobName.Substring(2, 2)); dictDocument.Add("Base_Material", base_Material); //base_Material dictDocument.Add("Customer", "FOUNDERPCBF5"); dictDocument.Add("Stackup_Ready", "YES"); dictDocument.Add("Imp_Calc_Fixed", "NO"); dictDocument.Add("Width_Min", "2"); //Width_Min="待确认" 这个预设为2 int k = 0; foreach (var item in dictDocument.Keys) { attrDocument_keys[k] = item.ToString(); k++; } int v = 0; foreach (var item in dictDocument.Values) { attrDocument_values[v] = item.ToString(); v++; } XmlGenerate.AutoGerateAttr(xmldoc, rootNode, attrDocument_keys, attrDocument_values); } catch (Exception) { throw; } //二级 节点设置属性 XmlElement nodeChild0 = xmldoc.CreateElement("Materials"); XmlElement nodeChild1 = xmldoc.CreateElement("Materials"); XmlElement nodeChild2 = xmldoc.CreateElement("Materials"); XmlElement nodeChild3 = xmldoc.CreateElement("STACKUP_Segments"); XmlElement nodeChild4 = xmldoc.CreateElement("Process_Parameters"); XmlElement nodeChild5 = xmldoc.CreateElement("Process_Parameters"); XmlElement nodeChild6 = xmldoc.CreateElement("Process_Parameters"); XmlElement nodeChild7 = xmldoc.CreateElement("Process_Parameters"); XmlElement nodeChild8 = xmldoc.CreateElement("Impedance_Lists"); XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild0, attrMaterials, "CORE"); XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild1, attrMaterials, "PREPREG"); XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild2, attrMaterials, "FOIL"); XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild4, attrProcess_Parameters, "CU_LAYER"); XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild5, attrProcess_Parameters, "DIE_LAYER"); XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild6, attrProcess_Parameters, "SM_LAYER"); XmlGenerate.AutoGerateCNodeAttr(rootNode, nodeChild7, attrProcess_Parameters, "DRILL_LIST"); //三级 节点设置属性 //Job对象: CORE、PREPREG、FOIL、STACKUP_SEG、CU_LAYER、DIE_LAYER、SM_LAYER、DRILL_LIST、IMP_ITEM // 三级节点个数 由Job决定 XmlElement[] xmlTEle_CORE = new XmlElement[jobNum_CORE]; //Job对应的所有CORE XmlElement[] xmlTEle_PREPREG = new XmlElement[jobNum_PREPREG]; //Job对应的所有PREPREG XmlElement[] xmlTEle_FOIL = new XmlElement[jobNum_FOIL]; //Job对应的所有FOIL XmlElement[] xmlTEle_STACKUP_SEG = new XmlElement[jobNum_STACKUP_SEG]; //Job对应的所有STACKUP_SEG XmlElement[] xmlTEle_CU_LAYER = new XmlElement[jobNum_CU_LAYER]; //Job对应的所有CU_LAYER XmlElement[] xmlTEle_DIE_LAYER = new XmlElement[jobNum_DIE_LAYER]; //Job对应的所有DIE_LAYER XmlElement[] xmlTEle_SM_LAYER = new XmlElement[1]; //Job对应的所有SM_LAYER XmlElement[] xmlTEle_DRILL_LIST = new XmlElement[jobNum_DRILL_LIST]; //Job对应的所有DRILL_LIST XmlElement[] xmlTEle_IMP_ITEM = new XmlElement[jobNum_IMP_ITEM]; //Job对应的所有IMP_ITEM string stop = ""; try { XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild0, xmlTEle_CORE, listCoreT, "CORE"); XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild1, xmlTEle_PREPREG, listPrepregT, "PREPREG"); XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild2, xmlTEle_FOIL, listFoilT, "FOIL"); XmlGenerate.SetAttrsByArrayToJobAttrs(xmldoc, nodeChild3, xmlTEle_STACKUP_SEG, attrsMaterialsStackupSegms, listStackupSeg, "STACKUP_SEG"); XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild4, xmlTEle_CU_LAYER, listCU_LAYERT, "CU_LAYER"); XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild5, xmlTEle_DIE_LAYER, listDieLayerT, "DIE_LAYER"); XmlGenerate.SetAttrsByArrayToJobAttrs(xmldoc, nodeChild6, xmlTEle_SM_LAYER, attrsProParaSM_LAYER, listSM_LAYER, "SM_LAYER"); XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild7, xmlTEle_DRILL_LIST, listDRILL_LISTT, "DRILL_LIST"); XmlGenerate.SetAttrsByArrayToJobAttrs3(xmldoc, nodeChild8, xmlTEle_IMP_ITEM, listIMP_ITEMT, "IMP_ITEM"); } catch (Exception) { //throw; } //二级节点 一级节点 XmlNode[] node = { nodeChild0, nodeChild1, nodeChild2, nodeChild3, nodeChild4, nodeChild5, nodeChild6, nodeChild7, nodeChild8 }; foreach (var item in node) { rootNode.AppendChild(item); } //一级节点 顶级节点 //jobName = "ME10N20JG6A3";//"GE02N20FQ4A0"; string folderpath = string.Format("C:\\SiSolverCalculate\\{0}\\", jobName); string filepath = string.Format("C:\\SiSolverCalculate\\{0}\\{1}.xml", jobName, jobName); string p1 = string.Format("C:\\SiSolverCalculate\\{0}\\", jobName); string filename = string.Format("{0}.xml", jobName); if (!Directory.Exists(folderpath)) { Directory.CreateDirectory(folderpath); //创建文件 xmldoc.Save(filepath); XmlGenerate.InterfaceOfSiSolver(filepath); } else { //文件是否存在,创建文件 if (File.Exists(filepath)) { //判断是否存在文件 //MessageBox.Show("阻抗已成功生成,如继续将生成的文件"); string str = XmlGenerate.fileExists(filepath, p1, times, jobName); xmldoc.Save(str); Thread.Sleep(10000); XmlGenerate.InterfaceOfSiSolver(str);//p1 + str //times = 1; } else { xmldoc.Save(filepath); Thread.Sleep(10000); XmlGenerate.InterfaceOfSiSolver(filepath); } } }