You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

606 lines
27 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<OriginMXL> OriginReadMXLXML(string filepath)
{
List<OriginMXL> listmxl = new List<OriginMXL>();
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;
}
}
}