现在的位置: 首页 > 综合 > 正文

PowerDesign的Pdm文件读取代码(C#)

2013年01月17日 ⁄ 综合 ⁄ 共 16719字 ⁄ 字号 评论关闭

PowerDesign进行表结构设计还是比较好,但有的时候想利用设计信息构造一些工具型程序,比如数据库结构同步,自动生成实体,还是比较麻烦.pdm文件采用的xml格式,要读取pdm文件,技术上实现这个不是很难,主要是体力活,以下代码参照了网友的代码,并在此基础上进行了完善,在此分享给大家,以减少不必要的体力劳动:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PdmFileSimpleReader
{
    /// <summary>
    /// 表列信息
    /// </summary>
    public class ColumnInfo
    {
        private TableInfo _OwnerTable;
        /// <summary>
        /// 所属表
        /// </summary>
        public TableInfo OwnerTable
        {
            get { return _OwnerTable; }
        }
        public ColumnInfo(TableInfo OwnerTable)
        {
            this._OwnerTable = OwnerTable;
        }
        /// <summary>
        /// 是否主键
        /// </summary>
        public bool IsPrimaryKey
        {
            get
            {
                PdmKey theKey = _OwnerTable.PrimaryKey;
                if (theKey != null)
                {
                    if (theKey.ColumnObjCodes.Contains(columnId))
                    {
                        return true;
                    }
                }
                return false;
            }
        }

        string columnId;
        /// <summary>
        /// 列标识
        /// </summary>
        public string ColumnId
        {
            get { return columnId; }
            set { columnId = value; }
        }
        string objectID;
        /// <summary>
        /// 对象Id,全局唯一.
        /// </summary>
        public string ObjectID
        {
            get { return objectID; }
            set { objectID = value; }
        }
        string name;
        /// <summary>
        /// 列名
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        string code;
        /// <summary>
        /// 列代码,对应数据库表字段名
        /// </summary>
        public string Code
        {
            get { return code; }
            set { code = value; }
        }
        DateTime creationDate;
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime CreationDate
        {
            get { return creationDate; }
            set { creationDate = value; }
        }
        string creator;
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator
        {
            get { return creator; }
            set { creator = value; }
        }
        DateTime modificationDate;
        /// <summary>
        /// 修改日期
        /// </summary>
        public DateTime ModificationDate
        {
            get { return modificationDate; }
            set { modificationDate = value; }
        }
        string modifier;
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier
        {
            get { return modifier; }
            set { modifier = value; }
        }
        string comment;
        /// <summary>
        /// 注视
        /// </summary>
        public string Comment
        {
            get { return comment; }
            set { comment = value; }
        }
        string dataType;
        /// <summary>
        /// 数据类型
        /// </summary>
        public string DataType
        {
            get { return dataType; }
            set { dataType = value; }
        }
        string length;
        /// <summary>
        /// 数据长度
        /// </summary>
        public string Length
        {
            get { return length; }
            set { length = value; }
        }
        bool identity;
        /// <summary>
        /// 是否自增量
        /// </summary>
        public bool Identity
        {
            get { return identity; }
            set { identity = value; }
        }
        bool mandatory;
        /// <summary>
        /// 是否可空
        /// </summary>
        public bool Mandatory
        {
            get { return mandatory; }
            set { mandatory = value; }
        }
        string extendedAttributesText;
        /// <summary>
        /// 扩展属性
        /// </summary>
        public string ExtendedAttributesText
        {
            get { return extendedAttributesText; }
            set { extendedAttributesText = value; }
        }
        /// <summary>
        /// 物理选项
        /// </summary>
        public string PhysicalOptions { get; set; }
        /// <summary>
        /// 精度
        /// </summary>
        public string Precision { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
    }

}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PdmFileSimpleReader
{
    /// <summary>
    /// 视图信息
    /// </summary>
    public class ViewInfo
    {
        public ViewInfo()
        {
            Columns = new List<ViewColumnInfo>();
        }
        /// <summary>
        /// 视图ID
        /// </summary>
        public string ViewId{get;set;}
        /// <summary>
        /// 视图对象id
        /// </summary>
        public string ObjectId {get;set;}
        /// <summary>
        /// 视图名
        /// </summary>
        public string Name {get;set;}
        /// <summary>
        /// 视图代码=>数据库中的视图名
        /// </summary>
        public string Code {get;set;}
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime CreationDate {get;set;}
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; set; }
        /// <summary>
        /// 修改日期
        /// </summary>
        public DateTime ModificationDate{get;set;}
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier {get;set;}
        /// <summary>
        /// 视图SQL
        /// </summary>
        public string ViewSQLQuery {get;set;}
        /// <summary>
        /// 注释
        /// </summary>
        public string Comment { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 标签化的SQL查询
        /// </summary>
        public string TaggedSQLQuery { get; set; }
        /// <summary>
        /// 视图列集合.
        /// </summary>
        public List<ViewColumnInfo> Columns { get; private set; } 
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PdmFileSimpleReader
{
    /// <summary>
    /// 视图列信息
    /// </summary>
    public class ViewColumnInfo
    {
        private ViewInfo _ViewInfo;

        public ViewInfo OwnerViewInfo
        {
            get { return _ViewInfo; }
        }
        public ViewColumnInfo(ViewInfo View)
        {
            _ViewInfo = View;
        }
        /// <summary>
        /// 列Id
        /// </summary>
        public string ViewColumnId { get; set; }
        /// <summary>
        /// 对象id
        /// </summary>
        public string ObjectID { get; set; }
        /// <summary>
        /// 列名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 列代码=>表字段名
        /// </summary>
        public string Code { get; set; }
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime CreationDate { get; set; }
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator { get; set; }
        /// <summary>
        /// 修改日期
        /// </summary>
        public DateTime ModificationDate { get; set; }
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier { get; set; }
        /// <summary>
        /// 注释
        /// </summary>
        public string Comment { get; set; }
        /// <summary>
        /// 数据类型
        /// </summary>
        public string DataType { get; set; }
        /// <summary>
        /// 数据长度
        /// </summary>
        public string Length { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PdmFileSimpleReader
{
    /// <summary>
    /// 表信息
    /// </summary>
    public class TableInfo
    {
        public TableInfo()
        {
            keys = new List<PdmKey>();
            columns = new List<ColumnInfo>();

        }
        string tableId;
        /// <summary>
        /// 表ID
        /// </summary>
        public string TableId
        {
            get { return tableId; }
            set { tableId = value; }
        }
        string objectID;
        /// <summary>
        /// 对象ID
        /// </summary>
        public string ObjectID
        {
            get { return objectID; }
            set { objectID = value; }
        }
        string name;
        /// <summary>
        /// 表名
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        string code;
        /// <summary>
        /// 表代码,对应数据库表名
        /// </summary>
        public string Code
        {
            get { return code; }
            set { code = value; }
        }
        DateTime creationDate;
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime CreationDate
        {
            get { return creationDate; }
            set { creationDate = value; }
        }
        string creator;
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator
        {
            get { return creator; }
            set { creator = value; }
        }
        DateTime modificationDate;
        /// <summary>
        /// 修改日期
        /// </summary>
        public DateTime ModificationDate
        {
            get { return modificationDate; }
            set { modificationDate = value; }
        }
        string modifier;
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier
        {
            get { return modifier; }
            set { modifier = value; }
        }
        string comment;
        /// <summary>
        /// 注释
        /// </summary>
        public string Comment
        {
            get { return comment; }
            set { comment = value; }
        }

        string physicalOptions;
        /// <summary>
        /// 物理选项
        /// </summary>
        public string PhysicalOptions
        {
            get { return physicalOptions; }
            set { physicalOptions = value; }
        }


        IList<ColumnInfo> columns;
        /// <summary>
        /// 表列集合
        /// </summary>
        public IList<ColumnInfo> Columns
        {
            get { return columns; }
        }

        IList<PdmKey> keys;
        /// <summary>
        /// 表Key集合
        /// </summary>
        public IList<PdmKey> Keys
        {
            get { return keys; }
        }

        public void AddColumn(ColumnInfo mColumn)
        {
            if (columns == null)
                columns = new List<ColumnInfo>();
            columns.Add(mColumn);
        }

        public void AddKey(PdmKey mKey)
        {
            if (keys == null)
                keys = new List<PdmKey>();
            keys.Add(mKey);
        }
        /// <summary>
        /// 主键Key代码.=>KeyId
        /// </summary>
        public string PrimaryKeyRefCode { get; set; }
        /// <summary>
        /// 主关键字
        /// </summary>
        public PdmKey PrimaryKey
        {
            get
            {
                foreach (var key in keys)
                {
                    if (key.KeyId == PrimaryKeyRefCode)
                    {
                        return key;
                    }
                }
                return null;
            }
        }
        /// <summary>
        /// 表的描述=>PDM Notes.
        /// </summary>
        public string Description { get; set; }
    }

}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PdmFileSimpleReader
{
    /// <summary>
    /// PDM实体集合
    /// </summary>
    public class PdmModels
    {
        public PdmModels()
        {
            Tables = new List<TableInfo>();
            Views = new List<ViewInfo>();
        }
        /// <summary>
        /// 表集合
        /// </summary>
        public IList<TableInfo> Tables { get;private set; }
        /// <summary>
        /// 视图集合
        /// </summary>
        public IList<ViewInfo> Views { get;private set; }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PdmFileSimpleReader
{
    /// <summary>
    /// 关键字
    /// </summary>
    public class PdmKey
    {
       
        string keyId;
        /// <summary>
        /// 关键字标识
        /// </summary>
        public string KeyId
        {
            get { return keyId; }
            set { keyId = value; }
        }
        string objectID;
        /// <summary>
        /// 对象Id
        /// </summary>
        public string ObjectID
        {
            get { return objectID; }
            set { objectID = value; }
        }
        string name;
        /// <summary>
        /// Key名
        /// </summary>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        string code;
        /// <summary>
        /// Key代码,对应数据库中的Key.
        /// </summary>
        public string Code
        {
            get { return code; }
            set { code = value; }
        }
        DateTime creationDate;
        /// <summary>
        /// 创建日期
        /// </summary>
        public DateTime CreationDate
        {
            get { return creationDate; }
            set { creationDate = value; }
        }
        string creator;
        /// <summary>
        /// 创建人
        /// </summary>
        public string Creator
        {
            get { return creator; }
            set { creator = value; }
        }
        DateTime modificationDate;
        /// <summary>
        /// 修改日期
        /// </summary>
        public DateTime ModificationDate
        {
            get { return modificationDate; }
            set { modificationDate = value; }
        }
        string modifier;
        /// <summary>
        /// 修改人
        /// </summary>
        public string Modifier
        {
            get { return modifier; }
            set { modifier = value; }
        }

        IList<ColumnInfo> columns;
        /// <summary>
        /// Key涉及的列
        /// </summary>
        public IList<ColumnInfo> Columns
        {
            get { return columns; }
        }

        public void AddColumn(ColumnInfo mColumn)
        {
            if (columns == null)
                columns = new List<ColumnInfo>();
            columns.Add(mColumn);
        }

        private List<string> _ColumnObjCodes = new List<string>();
        /// <summary>
        /// Key涉及的列代码,根据辞可访问到列信息.对应列的ColumnId
        /// </summary>
        public List<string> ColumnObjCodes
        {
            get { return _ColumnObjCodes; }
        }
        public void AddColumnObjCode(string ObjCode)
        {
            _ColumnObjCodes.Add(ObjCode);
        }

        private TableInfo _OwnerTable = null;

        public PdmKey(TableInfo table)
        {
            _OwnerTable = table;
        }
    }

}
/*
 * 本程序代码用于读取PowerDesign的pdm文件中的表和视图信息.
 * Albert.Tian 编辑整理于2013-03-11
 * CSDN博客地址:http://blog.csdn.net/hawksoft
 * 本文件参照了其它网友的代码,在此表示感谢.
 * 说明:基于一般在数据库中并不需要建立实际的参照(外键关联),这里没有实现
 * 读取参照的方法,大家如果需要可以在此基础上进行扩展。
 */

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace PdmFileSimpleReader
{
    public class PdmFileReader
    {
        private const string a = "attribute", c = "collection", o = "object";

        private const string cClasses = "c:Classes";
        private const string oClass = "o:Class";

        private const string cAttributes = "c:Attributes";
        private const string oAttribute = "o:Attribute";

        private const string cTables = "c:Tables";
        private const string oTable = "o:Table";

        private const string cColumns = "c:Columns";
        private const string oColumn = "o:Column";

        private const string cPrimaryKey = "c:PrimaryKey";

        private const string cViews = "c:Views";
        private const string oView = "o:View";

       
       
        /// <summary>构造函数 </summary>
        public PdmFileReader()
        {
        }

        /// <summary>
        /// 读取指定Pdm文件的实体集合
        /// </summary>
        /// <param name="PdmFile">Pdm文件名(全路径名)</param>
        /// <returns>实体集合</returns>
        public PdmModels ReadFromFile(string PdmFile)
        {
            XmlDocument xmlDoc;
            //加载文件.
            xmlDoc = new XmlDocument();
            xmlDoc.Load(PdmFile);
            //必须增加xml命名空间管理,否则读取会报错.
            XmlNamespaceManager xmlnsManager;
            xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable);
            xmlnsManager.AddNamespace("a", "attribute");
            xmlnsManager.AddNamespace("c", "collection");
            xmlnsManager.AddNamespace("o", "object");
            PdmModels theModels = new PdmModels();
            
            //读取所有表节点
            XmlNodeList xnTablesList = xmlDoc.SelectNodes("//" + cTables, xmlnsManager);
            foreach (XmlNode xmlTables in xnTablesList)
            {
                foreach (XmlNode xnTable in xmlTables.ChildNodes)
                {
                    //排除快捷对象.
                    if (xnTable.Name != "o:Shortcut")
                    {
                        theModels.Tables.Add(GetTable(xnTable));
                    }
                }
            }
            //读取所有视图节点.
            XmlNodeList xnViewsList = xmlDoc.SelectNodes("//" + cViews, xmlnsManager);
            foreach (XmlNode xmlViews in xnViewsList)
            {
                foreach (XmlNode xnView in xmlViews.ChildNodes)
                {
                    theModels.Views.Add(GetView(xnView));

                }
            }
            return theModels;

        }

        //初始化"o:View"的节点
        private ViewInfo GetView(XmlNode xnView)
        {
            ViewInfo theView = new ViewInfo();
            XmlElement xe = (XmlElement)xnView;
            theView.ViewId = xe.GetAttribute("Id");
            XmlNodeList xnTProperty = xe.ChildNodes;
            foreach (XmlNode xnP in xnTProperty)
            {
                switch (xnP.Name)
                {
                    case "a:ObjectID": theView.ObjectId = xnP.InnerText;
                        break;
                    case "a:Name": theView.Name = xnP.InnerText;
                        break;
                    case "a:Code": theView.Code = xnP.InnerText;
                        break;
                    case "a:CreationDate": theView.CreationDate = String2DateTime(xnP.InnerText);
                        break;
                    case "a:Creator": theView.Creator = xnP.InnerText;
                        break;
                    case "a:ModificationDate": theView.ModificationDate = String2DateTime(xnP.InnerText);
                        break;
                    case "a:Modifier": theView.Modifier = xnP.InnerText;
                        break;
                    case "a:Comment": theView.Comment = xnP.InnerText;
                        break;
                    case "a:Description": theView.Description = xnP.InnerText;
                        break;
                    case "a:View.SQLQuery": theView.ViewSQLQuery = xnP.InnerText;
                        break;
                    case "a:TaggedSQLQuery": theView.TaggedSQLQuery = xnP.InnerText;
                        break;
                    case "c:Columns":
                        InitColumns(xnP, theView);
                        break;
                }
            }
            return theView;
        }

        //初始化"o:Table"的节点
        private TableInfo GetTable(XmlNode xnTable)
        {
            TableInfo mTable = new TableInfo();
            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 = String2DateTime(xnP.InnerText);
                        break;
                    case "a:Creator": mTable.Creator = xnP.InnerText;
                        break;
                    case "a:ModificationDate": mTable.ModificationDate = String2DateTime(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;
                    case "c:PrimaryKey":
                        InitPrimaryKey(xnP, mTable);
                        break;
                    case "a:Description": mTable.Description = xnP.InnerText;
                        break;
                }
            }
            return mTable;
        }

        //PDM文件中的日期格式采用的是当前日期与1970年1月1日8点之差的秒树来保存.
        private DateTime _BaseDateTime = new DateTime(1970, 1, 1, 8, 0, 0);
        private DateTime String2DateTime(string DateString)
        {
            Int64 theTicker = Int64.Parse(DateString);
            return _BaseDateTime.AddSeconds(theTicker);
        }

        //初始化"c:Columns"的节点
        private void InitColumns(XmlNode xnColumns, TableInfo pTable)
        {
            foreach (XmlNode xnColumn in xnColumns)
            {
                pTable.AddColumn(GetColumn(xnColumn,pTable));
            }
        }
        //初始化"c:Columns"的节点
        private void InitColumns(XmlNode xnColumns, ViewInfo pView)
        {
            foreach (XmlNode xnColumn in xnColumns)
            {
                pView.Columns.Add(GetColumn(xnColumn, pView));
            }
        }
        //初始化c:Keys"的节点
        private void InitKeys(XmlNode xnKeys, TableInfo pTable)
        {
            foreach (XmlNode xnKey in xnKeys)
            {
                pTable.AddKey(GetKey(xnKey,pTable));
            }
        }
        //初始化c:PrimaryKey"的节点
        private void InitPrimaryKey(XmlNode xnPrimaryKey, TableInfo pTable)
        {
            pTable.PrimaryKeyRefCode= GetPrimaryKey(xnPrimaryKey);
        }
        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;
        } 

        private ColumnInfo GetColumn(XmlNode xnColumn,TableInfo OwnerTable)
        {
            ColumnInfo mColumn = new ColumnInfo(OwnerTable);
            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 = String2DateTime(xnP.InnerText);
                        break;
                    case "a:Creator": mColumn.Creator = xnP.InnerText;
                        break;
                    case "a:ModificationDate": mColumn.ModificationDate = String2DateTime(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;
                    case "a:Precision":
                        mColumn.Precision = xnP.InnerText;
                        break;
                }
            }
            return mColumn;
        }
        private ViewColumnInfo GetColumn(XmlNode xnColumn, ViewInfo OwnerView)
        {
            ViewColumnInfo mColumn = new ViewColumnInfo(OwnerView);
            XmlElement xe = (XmlElement)xnColumn;
            mColumn.ViewColumnId = 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 =String2DateTime(xnP.InnerText);
                        break;
                    case "a:Creator": mColumn.Creator = xnP.InnerText;
                        break;
                    case "a:ModificationDate": mColumn.ModificationDate = String2DateTime(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:Precision":
                        mColumn.Description = xnP.InnerText;
                        break;
                }
            }
            return mColumn;
        }
        private string GetPrimaryKey(XmlNode xnKey)
        {
            XmlElement xe = (XmlElement)xnKey;
            if (xe.ChildNodes.Count > 0)
            {
                XmlElement theKP = (XmlElement)xe.ChildNodes[0];
                return theKP.GetAttribute("Ref");
            }
            return "";
        }
        private void InitKeyColumns(XmlNode xnKeyColumns, PdmKey Key)
        {
            XmlElement xe = (XmlElement)xnKeyColumns;
            XmlNodeList xnKProperty = xe.ChildNodes;
            foreach (XmlNode xnP in xnKProperty)
            {
                string theRef = ((XmlElement)xnP).GetAttribute("Ref");
                Key.AddColumnObjCode(theRef);
            }
        }
        private PdmKey GetKey(XmlNode xnKey,TableInfo OwnerTable)
        {
            PdmKey mKey = new PdmKey(OwnerTable);
            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 = String2DateTime(xnP.InnerText);
                        break;
                    case "a:Creator": mKey.Creator = xnP.InnerText;
                        break;
                    case "a:ModificationDate": mKey.ModificationDate = String2DateTime(xnP.InnerText);
                        break;
                    case "a:Modifier": mKey.Modifier = xnP.InnerText;
                        break;
                    case "c:Key.Columns":
                        InitKeyColumns(xnP, mKey);
                        break;
                }
            }
            return mKey;
        }
    }

}

以上代码在vs2010,pd16上测试通过.

抱歉!评论已关闭.