using System; using System.Collections.Generic; using System.Collections; using System.Text; using System.Xml; using ZwSoft.ZwCAD.DatabaseServices; using ZwSoft.ZwCAD.Runtime; using ZwSoft.ZwCAD.Geometry; using ZwSoft.ZwCAD.ApplicationServices; using ZwSoft.ZwCAD.EditorInput; namespace HelloTeamcenter.hello { class OriginReadXml { private Editor ed = ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor; public OriginBTL OriginReadBTL(string filepath,string btlname) { OriginBTL btlinfo = new OriginBTL(); XmlReaderSettings settings = null; XmlDocument xmldocument = null; XmlReader xmlreader = null; try { ed.WriteMessage("XML路径:" + filepath + "\n"); settings = new XmlReaderSettings(); settings.IgnoreComments = true; ;//忽略文档里面的注释 xmldocument = new XmlDocument(); xmlreader = XmlReader.Create(filepath, settings); xmldocument.Load(xmlreader); //得到根节点的子节点title XmlNodeList xmltitlelist = xmldocument.SelectSingleNode("Titles").ChildNodes; OriginTool origintool = new OriginTool(); foreach (XmlNode title in xmltitlelist) { //获得一个title XmlElement xeonetitle = (XmlElement)title; if (xeonetitle.HasAttribute("blockname")) { ed.WriteMessage("标题栏块名称:" + xeonetitle.GetAttribute("blockname").ToString() + "\n"); } else { ed.WriteMessage("请确认标题栏.xml文件配置含有blockname属性\n"); return null; } string tempbtlname = xeonetitle.GetAttribute("blockname").ToString(); ed.WriteMessage("标题栏块名称:" + tempbtlname + "\n"); if (tempbtlname == btlname) { //获得title子节点 XmlNodeList onetitleinfo = xeonetitle.ChildNodes; btlinfo.Btlname = btlname; foreach (XmlNode node in onetitleinfo) { XmlElement xeone = (XmlElement)node; string titletype = ""; string titlecad = ""; string titletc = ""; string titlewriteable = ""; string titleupdateable = ""; string titlefromtc = ""; if (xeone.HasAttribute("type")) { titletype = xeone.GetAttribute("type").ToString(); } if (xeone.HasAttribute("cad")) { titlecad = xeone.GetAttribute("cad").ToString(); ed.WriteMessage("CAD ATTR =" + titlecad + "\n"); } if (xeone.HasAttribute("tc")) { titletc = xeone.GetAttribute("tc").ToString(); } if (xeone.HasAttribute("writeable")) { titlewriteable = xeone.GetAttribute("writeable").ToString(); } if (xeone.HasAttribute("updateable")) { titleupdateable = xeone.GetAttribute("updateable").ToString(); } if (xeone.HasAttribute("fromtc")) { titlefromtc = xeone.GetAttribute("fromtc").ToString(); } /*ed.WriteMessage(xeone.GetAttribute("type").ToString() + " " + xeone.GetAttribute("cad").ToString() + " " + xeone.GetAttribute("tc").ToString() +"\n");*/ btlinfo.Btldatatable = origintool.TableHasKey(btlinfo.Btldatatable, titlecad, ""); btlinfo.Btltctable = origintool.TableHasKey(btlinfo.Btltctable, titlecad, titletc); btlinfo.Btltypetable = origintool.TableHasKey(btlinfo.Btltypetable, titlecad, titletype); btlinfo.Btlwritetable = origintool.TableHasKey(btlinfo.Btlwritetable, titlecad, titlewriteable); btlinfo.Btlupdatetable = origintool.TableHasKey(btlinfo.Btlupdatetable, titlecad, titleupdateable); btlinfo.Btlfromtctable = origintool.TableHasKey(btlinfo.Btlfromtctable,titlecad,titlefromtc); } } } } catch (System.Exception ex) { xmlreader.Close(); ed.WriteMessage(ex.Message + "\n"); } finally { xmlreader.Close(); } return btlinfo; } //获取标题栏.XML信息,将信息与OriginBTL对应 public ArrayList OriginReadBTLXML(string filepath) { ArrayList listbtl = new ArrayList(); XmlReaderSettings settings = null; XmlDocument xmldocument = null; XmlReader xmlreader = null; filepath = filepath + "标题栏.xml"; try { ed.WriteMessage("XML路径:" + filepath + "\n"); settings = new XmlReaderSettings(); settings.IgnoreComments = true; ;//忽略文档里面的注释 xmldocument = new XmlDocument(); xmlreader = XmlReader.Create(filepath, settings); xmldocument.Load(xmlreader); //得到根节点的子节点title XmlNodeList xmltitlelist = xmldocument.SelectSingleNode("Titles").ChildNodes; OriginTool origintool = new OriginTool(); foreach (XmlNode title in xmltitlelist) { //获得一个title XmlElement xeonetitle = (XmlElement)title; if (xeonetitle.HasAttribute("blockname")) { ed.WriteMessage("标题栏块名称:" + xeonetitle.GetAttribute("blockname").ToString() + "\n"); } else { ed.WriteMessage("请确认标题栏.xml文件配置含有blockname属性\n"); return listbtl; } string btlname = xeonetitle.GetAttribute("blockname").ToString(); ed.WriteMessage("标题栏块名称:" + btlname + "\n"); OriginBTL btlinfo = origintool.GetTitleInfo(filepath, btlname); if (btlinfo != null) listbtl.Add(btlinfo); } } catch (System.Exception ex) { xmlreader.Close(); ed.WriteMessage(ex.Message+"\n"); } finally { xmlreader.Close(); } return listbtl; } public OriginMXL OriginReadMXL(string filepath) { OriginMXL mxlinfo = new OriginMXL(); XmlReaderSettings settings = null; XmlDocument xmldocument = null; XmlReader xmlreader = null; try { ed.WriteMessage("XML路径:" + filepath + "\n"); settings = new XmlReaderSettings(); settings.IgnoreComments = true; ;//忽略文档里面的注释 xmldocument = new XmlDocument(); xmlreader = XmlReader.Create(filepath, settings); xmldocument.Load(xmlreader); //得到根节点的子节点bomline XmlNodeList xmlmxllist = xmldocument.SelectSingleNode("BomLines").ChildNodes; OriginTool origintool = new OriginTool(); foreach (XmlNode bomline in xmlmxllist) { //获得一个bomline XmlElement xeonebomline = (XmlElement)bomline; if (xeonebomline.HasAttribute("blockname")) { ed.WriteMessage("明细栏块名称:" + xeonebomline.GetAttribute("blockname").ToString() + "\n"); } else { ed.WriteMessage("请确认明细表.xml文件配置含有blockname属性\n"); return null; } //获得bomline子节点 XmlNodeList onebomlineinfo = xeonebomline.ChildNodes; mxlinfo.Mxlname = xeonebomline.GetAttribute("blockname").ToString(); foreach (XmlNode node in onebomlineinfo) { XmlElement xeone = (XmlElement)node; /*ed.WriteMessage(xeone.GetAttribute("cad").ToString() + " " + xeone.GetAttribute("tc").ToString() + " " + xeone.GetAttribute("is_bomline").ToString() + " " + xeone.GetAttribute("overwrite").ToString() + "\n");*/ string bomlinetype = ""; string bomlinecad = ""; string bomlinetc = ""; string isbomline = ""; string updatebomline = ""; if (xeone.HasAttribute("type")) { bomlinetype = xeone.GetAttribute("type").ToString(); } if (xeone.HasAttribute("cad")) { bomlinecad = xeone.GetAttribute("cad").ToString(); } if (xeone.HasAttribute("tc")) { bomlinetc = xeone.GetAttribute("tc").ToString(); } if (xeone.HasAttribute("is_bomline")) { isbomline = xeone.GetAttribute("is_bomline").ToString(); } if (xeone.HasAttribute("overwrite")) { updatebomline = xeone.GetAttribute("overwrite").ToString(); } mxlinfo.Mxltypetable = origintool.TableHasKey(mxlinfo.Mxltypetable, bomlinecad, bomlinetype); mxlinfo.Mxldatatable = origintool.TableHasKey(mxlinfo.Mxldatatable, bomlinecad, ""); mxlinfo.Mxltctable = origintool.TableHasKey(mxlinfo.Mxltctable, bomlinecad, bomlinetc); mxlinfo.Mxlisbomtable = origintool.TableHasKey(mxlinfo.Mxlisbomtable, bomlinecad, isbomline); mxlinfo.Mxlupdatetable = origintool.TableHasKey(mxlinfo.Mxlupdatetable, bomlinecad, updatebomline); ed.WriteMessage("==================================\n"); } } } catch (System.Exception ex) { xmlreader.Close(); ed.WriteMessage(ex.Message + "\n"); } finally { xmlreader.Close(); } return mxlinfo; } //获取明细表.XML信息,将信息与OriginMXL对应 public List OriginReadMXLXML(string filepath) { List listmxl = new List(); XmlReaderSettings settings = null; XmlDocument xmldocument = null; XmlReader xmlreader = null; filepath = filepath + "明细表.xml"; try { ed.WriteMessage("XML路径:" + filepath + "\n"); settings = new XmlReaderSettings(); settings.IgnoreComments = true; ;//忽略文档里面的注释 xmldocument = new XmlDocument(); xmlreader = XmlReader.Create(filepath, settings); xmldocument.Load(xmlreader); //得到根节点的子节点bomline XmlNodeList xmlmxllist = xmldocument.SelectSingleNode("BomLines").ChildNodes; OriginTool origintool = new OriginTool(); string mxlname = ""; foreach (XmlNode bomline in xmlmxllist) { //获得一个bomline XmlElement xeonebomline = (XmlElement)bomline; if (xeonebomline.HasAttribute("blockname")) { ed.WriteMessage("明细栏块名称:" + xeonebomline.GetAttribute("blockname").ToString() + "\n"); mxlname = xeonebomline.GetAttribute("blockname").ToString(); } else { ed.WriteMessage("请确认明细表.xml文件配置含有blockname属性\n"); return null; } } listmxl = origintool.GetMXLInfo(filepath, mxlname); } catch (System.Exception ex) { xmlreader.Close(); ed.WriteMessage(ex.Message + "\n"); } finally { xmlreader.Close(); } return listmxl; } //获取Item类型.xml文件信息 public Hashtable OriginReadTypeXML(string filepath,Hashtable itemtypetable) { XmlReaderSettings settings = null; XmlDocument xmldocument = null; XmlReader xmlreader = null; filepath = filepath + "Item类型.xml"; try { ed.WriteMessage("XML路径:" + filepath + "\n"); settings = new XmlReaderSettings(); settings.IgnoreComments = true; ;//忽略文档里面的注释 xmldocument = new XmlDocument(); xmlreader = XmlReader.Create(filepath, settings); xmldocument.Load(xmlreader); //得到根节点的子节点ItemTypes XmlNodeList xmltypelist = xmldocument.SelectSingleNode("ItemTypes").ChildNodes; OriginTool origintool = new OriginTool(); foreach (XmlNode onetype in xmltypelist) { //获得一个ItemType XmlElement xeonetype = (XmlElement)onetype; //获得ItemType子节点 XmlNodeList onetypeinfo = xeonetype.ChildNodes; foreach (XmlNode node in onetypeinfo) { XmlElement xeone = (XmlElement)node; //string typecad = ""; string typetc = ""; //if (xeone.HasAttribute("cad")) //{ // typecad = xeone.GetAttribute("cad").ToString(); //} //else // ed.WriteMessage("Item类型.xml文件配置不符合规范\n"); if (xeone.HasAttribute("tc")) { typetc = xeone.GetAttribute("tc").ToString(); } else ed.WriteMessage("Item类型.xml文件配置不符合规范\n"); /*ed.WriteMessage(xeone.GetAttribute("type").ToString() + " " + xeone.GetAttribute("cad").ToString() + " " + xeone.GetAttribute("tc").ToString() +"\n");*/ itemtypetable = origintool.TableHasKey(itemtypetable, typetc, typetc); } } } catch (System.Exception ex) { xmlreader.Close(); ed.WriteMessage(ex.Message + "\n"); } finally { xmlreader.Close(); } return itemtypetable; } //获取Item类型.xml文件信息 public OriginDataSet OriginReadDataSetXML(string filepath) { OriginDataSet dataset = new OriginDataSet(); XmlReaderSettings settings = null; XmlDocument xmldocument = null; XmlReader xmlreader = null; filepath = filepath + "数据集.xml"; try { ed.WriteMessage("XML路径:" + filepath + "\n"); settings = new XmlReaderSettings(); settings.IgnoreComments = true; ;//忽略文档里面的注释 xmldocument = new XmlDocument(); xmlreader = XmlReader.Create(filepath, settings); xmldocument.Load(xmlreader); //得到根节点的子节点ItemTypes XmlNodeList xmldatalist = xmldocument.SelectSingleNode("DataSets").ChildNodes; OriginTool origintool = new OriginTool(); foreach (XmlNode onedata in xmldatalist) { //获得一个data XmlElement xeonedata = (XmlElement)onedata; if (xeonedata.HasAttribute("type") && xeonedata.HasAttribute("refname") && xeonedata.HasAttribute("separator")) { dataset.Datatype = xeonedata.GetAttribute("type").ToString(); dataset.Refname = xeonedata.GetAttribute("refname").ToString(); dataset.Separator = xeonedata.GetAttribute("separator").ToString(); ed.WriteMessage(dataset.Datatype + "\t" + dataset.Refname + "\t" + dataset.Separator + "\n"); } else { ed.WriteMessage("数据集.xml文件配置有误,请确认!\n"); return null; } //获得dataset子节点 XmlNodeList onedatainfo = xeonedata.ChildNodes; foreach (XmlNode node in onedatainfo) { XmlElement xeone = (XmlElement)node; if (xeone.HasAttribute("seq") && xeone.HasAttribute("from")) { int seq = Convert.ToInt32(xeone.GetAttribute("seq").ToString()); string from = xeone.GetAttribute("from").ToString(); dataset.Dsnametable = origintool.TableHasKey(dataset.Dsnametable, seq, from); ed.WriteMessage(seq+"\t"+from+"\n"); } } } } catch (System.Exception ex) { xmlreader.Close(); ed.WriteMessage(ex.Message + "\n"); } finally { xmlreader.Close(); } return dataset; } //获取规则.xml文件信息 public OriginTypeRule OriginReadRuleXML(string filepath) { OriginTypeRule origintyperule = new OriginTypeRule(); XmlReaderSettings settings = null; XmlDocument xmldocument = null; XmlReader xmlreader = null; filepath = filepath + "规则.xml"; try { ed.WriteMessage("XML路径:" + filepath + "\n"); settings = new XmlReaderSettings(); settings.IgnoreComments = true; ;//忽略文档里面的注释 xmldocument = new XmlDocument(); xmlreader = XmlReader.Create(filepath, settings); xmldocument.Load(xmlreader); //得到根节点的子节点Rule XmlNodeList xmlrulelist = xmldocument.SelectSingleNode("Rules").ChildNodes; OriginTool origintool = new OriginTool(); foreach (XmlNode onerule in xmlrulelist) { //获得一个rule XmlElement xeonerule = (XmlElement)onerule; if (xeonerule.HasAttribute("default")) { origintyperule.Defaulttype = xeonerule.GetAttribute("default").ToString(); ed.WriteMessage("默认类型:"+origintyperule.Defaulttype + "\n"); } else { origintyperule.Defaulttype = "Item"; } //获得rule子节点 XmlNodeList oneruleinfo = xeonerule.ChildNodes; foreach (XmlNode node in oneruleinfo) { XmlElement xeone = (XmlElement)node; if (xeone.HasAttribute("seq")) { int seq = Convert.ToInt32(xeone.GetAttribute("seq").ToString()); ed.WriteMessage("序号" + seq + "\n"); } else { ed.WriteMessage("规则.xml文件中没有配置seq属性列,请检查配置\n"); return null; } string seqstring = xeone.GetAttribute("seq").ToString(); if (xeone.HasAttribute("source")) { string sourcestring = xeone.GetAttribute("source").ToString(); ed.WriteMessage("序号:"+seqstring+"要处理的对象:" + sourcestring + "\n"); origintyperule.Sourcetable = origintool.TableHasKey(origintyperule.Sourcetable, seqstring, sourcestring); } else origintyperule.Sourcetable = origintool.TableHasKey(origintyperule.Sourcetable, seqstring, ""); if (xeone.HasAttribute("startwith")) { string startstring = xeone.GetAttribute("startwith").ToString(); ed.WriteMessage("序号:" + seqstring + "startwith:" + startstring + "\n"); origintyperule.Starttable = origintool.TableHasKey(origintyperule.Starttable, seqstring, startstring); } else origintyperule.Starttable = origintool.TableHasKey(origintyperule.Starttable, seqstring, ""); if (xeone.HasAttribute("endwith")) { string endstring = xeone.GetAttribute("endwith").ToString(); ed.WriteMessage("序号:" + seqstring + "endwith:" + endstring + "\n"); origintyperule.Endtable = origintool.TableHasKey(origintyperule.Endtable, seqstring, endstring); } else origintyperule.Endtable = origintool.TableHasKey(origintyperule.Endtable, seqstring, ""); if (xeone.HasAttribute("contain")) { string containstring = xeone.GetAttribute("contain").ToString(); ed.WriteMessage("序号:" + seqstring + "contain:" + containstring + "\n"); origintyperule.Containtable = origintool.TableHasKey(origintyperule.Containtable,seqstring,containstring); } else origintyperule.Containtable = origintool.TableHasKey(origintyperule.Containtable, seqstring, ""); if (xeone.HasAttribute("equal")) { string equalstring = xeone.GetAttribute("equal").ToString(); ed.WriteMessage("序号:" + seqstring + "equal:" + equalstring + "\n"); origintyperule.Equaltable = origintool.TableHasKey(origintyperule.Equaltable,seqstring,equalstring); } else origintyperule.Equaltable = origintool.TableHasKey(origintyperule.Equaltable, seqstring, ""); if (xeone.HasAttribute("type")) { string typestring = xeone.GetAttribute("type").ToString(); ed.WriteMessage("序号:" + seqstring + "type:" + typestring + "\n"); origintyperule.Typetable = origintool.TableHasKey(origintyperule.Typetable,seqstring,typestring); } else origintyperule.Typetable = origintool.TableHasKey(origintyperule.Typetable, seqstring, ""); if (xeone.HasAttribute("true")) { string truestring = xeone.GetAttribute("true").ToString(); ed.WriteMessage("序号:" + seqstring + "true:" + truestring + "\n"); origintyperule.Truetable = origintool.TableHasKey(origintyperule.Truetable,seqstring,truestring); } else origintyperule.Truetable = origintool.TableHasKey(origintyperule.Truetable, seqstring, ""); if (xeone.HasAttribute("false")) { string falsestring = xeone.GetAttribute("false").ToString(); ed.WriteMessage("序号:" + seqstring + "false:" + falsestring + "\n"); origintyperule.Falsetable = origintool.TableHasKey(origintyperule.Falsetable,seqstring,falsestring); } else origintyperule.Falsetable = origintool.TableHasKey(origintyperule.Falsetable, seqstring, ""); } } } catch (System.Exception ex) { xmlreader.Close(); ed.WriteMessage(ex.Message + "\n"); } finally { xmlreader.Close(); } return origintyperule; } } }