/// <summary> /// 处理PDM文件 /// </summary> public class DoPDMDal:IDoDataBaseDal { public List<DataBaseInfo> GetDataBaseTable() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(AppSettings.PdmFilePath); XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable); xmlnsManager.AddNamespace("a", "attribute"); xmlnsManager.AddNamespace("c", "collection"); xmlnsManager.AddNamespace("o", "object"); XmlNode xnTables = xmlDoc.SelectSingleNode("//" + "c:Tables", xmlnsManager); List<PDMTableInfo> Tables = new List<PDMTableInfo>(); foreach (XmlNode xnTable in xnTables.ChildNodes) { Tables.Add(GetTable(xnTable)); } List<DataBaseInfo> list = new List<DataBaseInfo>(); foreach (var m in Tables) { DataBaseInfo entity = new DataBaseInfo(); entity.TableName=m.Code; list.Add(entity); } return list; } public List<TableInfo> GetTableColumnName(string tableName) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(AppSettings.PdmFilePath); XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable); xmlnsManager.AddNamespace("a", "attribute"); xmlnsManager.AddNamespace("c", "collection"); xmlnsManager.AddNamespace("o", "object"); XmlNode xnTables = xmlDoc.SelectSingleNode("//" + "c:Tables", xmlnsManager); List<PDMColumnInfo> list = new List<PDMColumnInfo>(); foreach (XmlNode xnTable in xnTables.ChildNodes) { PDMTableInfo entity = GetTable(xnTable); if(entity.Code==tableName) list= GetTable(xnTable).Columns.ToList(); } List<TableInfo> tableInfoList = new List<TableInfo>(); foreach (var m in list) { tableInfoList.Add( new TableInfo() { ColumnName=m.Code, ColumnType=m.DataType } ); } return tableInfoList; } //初始化"o:Table"的节点 private PDMTableInfo GetTable(XmlNode xnTable) { PDMTableInfo mTable = new PDMTableInfo(); XmlElement xe = (XmlElement)xnTable; mTable.TableId = xe.GetAttribute("Id"); XmlNodeList xnTProperty = xe.ChildNodes; foreach (XmlNode xnP in xnTProperty) { switch (xnP.Name) { case "a:ObjectID": mTable.ObjectID = xnP.InnerText; break; case "a:Name": mTable.Name = xnP.InnerText; break; case "a:Code": mTable.Code = xnP.InnerText; break; case "a:CreationDate": mTable.CreationDate = Convert.ToInt32(xnP.InnerText); break; case "a:Creator": mTable.Creator = xnP.InnerText; break; case "a:ModificationDate": mTable.ModificationDate = Convert.ToInt32(xnP.InnerText); break; case "a:Modifier": mTable.Modifier = xnP.InnerText; break; case "a:Comment": mTable.Comment = xnP.InnerText; break; case "a:PhysicalOptions": mTable.PhysicalOptions = xnP.InnerText; break; case "c:Columns": InitColumns(xnP, mTable); break; case "c:Keys": InitKeys(xnP, mTable); break; } } return mTable; } //初始化"c:Columns"的节点 private void InitColumns(XmlNode xnColumns, PDMTableInfo pTable) { foreach (XmlNode xnColumn in xnColumns) { pTable.AddColumn(GetColumn(xnColumn)); } } //初始化c:Keys"的节点 private void InitKeys(XmlNode xnKeys, PDMTableInfo pTable) { foreach (XmlNode xnKey in xnKeys) { pTable.AddKey(GetKey(xnKey)); } } private PDMColumnInfo GetColumn(XmlNode xnColumn) { PDMColumnInfo mColumn = new PDMColumnInfo(); XmlElement xe = (XmlElement)xnColumn; mColumn.ColumnId = xe.GetAttribute("Id"); XmlNodeList xnCProperty = xe.ChildNodes; foreach (XmlNode xnP in xnCProperty) { switch (xnP.Name) { case "a:ObjectID": mColumn.ObjectID = xnP.InnerText; break; case "a:Name": mColumn.Name = xnP.InnerText; break; case "a:Code": mColumn.Code = xnP.InnerText; break; case "a:CreationDate": mColumn.CreationDate = Convert.ToInt32(xnP.InnerText); break; case "a:Creator": mColumn.Creator = xnP.InnerText; break; case "a:ModificationDate": mColumn.ModificationDate = Convert.ToInt32(xnP.InnerText); break; case "a:Modifier": mColumn.Modifier = xnP.InnerText; break; case "a:Comment": mColumn.Comment = xnP.InnerText; break; case "a:DataType": mColumn.DataType = xnP.InnerText; break; case "a:Length": mColumn.Length = xnP.InnerText; break; case "a:Identity": mColumn.Identity = ConvertToBooleanPG(xnP.InnerText); break; case "a:Mandatory": mColumn.Mandatory = ConvertToBooleanPG(xnP.InnerText); break; case "a:PhysicalOptions": mColumn.PhysicalOptions = xnP.InnerText; break; case "a:ExtendedAttributesText": mColumn.ExtendedAttributesText = xnP.InnerText; break; } } return mColumn; } private PDMKey GetKey(XmlNode xnKey) { PDMKey mKey = new PDMKey(); XmlElement xe = (XmlElement)xnKey; mKey.KeyId = xe.GetAttribute("Id"); XmlNodeList xnKProperty = xe.ChildNodes; foreach (XmlNode xnP in xnKProperty) { switch (xnP.Name) { case "a:ObjectID": mKey.ObjectID = xnP.InnerText; break; case "a:Name": mKey.Name = xnP.InnerText; break; case "a:Code": mKey.Code = xnP.InnerText; break; case "a:CreationDate": mKey.CreationDate = Convert.ToInt32(xnP.InnerText); break; case "a:Creator": mKey.Creator = xnP.InnerText; break; case "a:ModificationDate": mKey.ModificationDate = Convert.ToInt32(xnP.InnerText); break; case "a:Modifier": mKey.Modifier = xnP.InnerText; break; //还差 <c:Key.Columns> } } return mKey; } private static Boolean ConvertToBooleanPG(Object obj) { if (obj != null) { string mStr = obj.ToString(); mStr = mStr.ToLower(); if ((mStr.Equals("y") || mStr.Equals("1")) || mStr.Equals("true")) { return true; } } return false; } }
种个实体:
public class PDMColumnInfo { public PDMColumnInfo() { } string columnId; public string ColumnId { get { return columnId; } set { columnId = value; } } string objectID; public string ObjectID { get { return objectID; } set { objectID = value; } } string name; public string Name { get { return name; } set { name = value; } } string code; public string Code { get { return code; } set { code = value; } } int creationDate; public int CreationDate { get { return creationDate; } set { creationDate = value; } } string creator; public string Creator { get { return creator; } set { creator = value; } } int modificationDate; public int ModificationDate { get { return modificationDate; } set { modificationDate = value; } } string modifier; public string Modifier { get { return modifier; } set { modifier = value; } } string comment; public string Comment { get { return comment; } set { comment = value; } } string dataType; public string DataType { get { return dataType; } set { if (value.Contains("nvarchar") || value.Contains("varchar")) { value = "string"; } if (value.Contains("money")) { value = "decimal"; } dataType = value; } } string length; public string Length { get { return length; } set { length = value; } } //是否自增量 bool identity; public bool Identity { get { return identity; } set { identity = value; } } bool mandatory; //禁止为空 public bool Mandatory { get { return mandatory; } set { mandatory = value; } } string extendedAttributesText; //扩展属性 public string ExtendedAttributesText { get { return extendedAttributesText; } set { extendedAttributesText = value; } } string physicalOptions; public string PhysicalOptions { get { return physicalOptions; } set { physicalOptions = value; } } }
public class PDMKey { public PDMKey() { } string keyId; public string KeyId { get { return keyId; } set { keyId = value; } } string objectID; public string ObjectID { get { return objectID; } set { objectID = value; } } string name; public string Name { get { return name; } set { name = value; } } string code; public string Code { get { return code; } set { code = value; } } int creationDate; public int CreationDate { get { return creationDate; } set { creationDate = value; } } string creator; public string Creator { get { return creator; } set { creator = value; } } int modificationDate; public int ModificationDate { get { return modificationDate; } set { modificationDate = value; } } string modifier; public string Modifier { get { return modifier; } set { modifier = value; } } IList<PDMColumnInfo> columns; public IList<PDMColumnInfo> Columns { get { return columns; } } public void AddColumn(PDMColumnInfo mColumn) { if (columns == null) columns = new List<PDMColumnInfo>(); columns.Add(mColumn); } }
public class PDMTableInfo { public PDMTableInfo() { } string tableId; public string TableId { get { return tableId; } set { tableId = value; } } string objectID; public string ObjectID { get { return objectID; } set { objectID = value; } } string name; public string Name { get { return name; } set { name = value; } } string code; public string Code { get { return code; } set { code = value; } } int creationDate; public int CreationDate { get { return creationDate; } set { creationDate = value; } } string creator; public string Creator { get { return creator; } set { creator = value; } } int modificationDate; public int ModificationDate { get { return modificationDate; } set { modificationDate = value; } } string modifier; public string Modifier { get { return modifier; } set { modifier = value; } } string comment; public string Comment { get { return comment; } set { comment = value; } } string physicalOptions; public string PhysicalOptions { get { return physicalOptions; } set { physicalOptions = value; } } IList<PDMColumnInfo> columns; public IList<PDMColumnInfo> Columns { get { return columns; } } IList<PDMKey> keys; public IList<PDMKey> Keys { get { return keys; } } public void AddColumn(PDMColumnInfo mColumn) { if (columns == null) columns = new List<PDMColumnInfo>(); columns.Add(mColumn); } public void AddKey(PDMKey mKey) { if (keys == null) keys = new List<PDMKey>(); keys.Add(mKey); } }