一个简单的powerdesigner模型(oom,pdm)分析器
由于工作需要,写了一个简单的模型分析器,源码:

/// <summary>
/// 通过Xml分析powerdesigner模型文件
/// </summary>
public class ModelAnalyserLinq : IModelAnalyser
{
/// <summary>
/// Xml命名空间管理
/// </summary>
XmlNamespaceManager nsmgr = null;
/// <summary>
/// 属性列表,记录字段
/// </summary>
List<ModelElement> listAtt = new List<ModelElement>();
/// <summary>
/// 单元列表:记录领域对象列表或者数据库表对象列表
/// </summary>
List<ModelElement> listUnit = new List<ModelElement>();
/// <summary>
///
/// </summary>
ModelType _mt = ModelType.Domain;
/// <summary>
/// 一个ModelAnalyser对应一个XElement root
/// </summary>
XElement root = null;
public ModelAnalyserLinq(String fileName)
: this(fileName, ModelType.Domain)
{
try
{
//执行linq检索(element)
var classesNodes = from element in root.Descendants(Const.c + "Classes")
select element;
if (classesNodes.Count<XElement>() > 0)//说明存在类型,就是领域模型,数据库模型中不存在这个的
{
_mt = ModelType.Domain;
}
else
{
var tablesNodes = from element in root.Descendants(Const.c + "Tables")
select element;
if (tablesNodes.Count<XElement>() > 0)//说明存在类型,就是数据库模型
{
_mt = ModelType.Database;
}
else
{
throw new Exception("非法模型文件,系统只支持领域模型和数据库模型!");
}
}
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelAnalyserLinq(String fileName, ModelType mt)
{
try
{
_mt = mt;
root = XElement.Load(fileName);
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelType MT
{
get { return _mt; }
}
/// <summary>
/// 获取模型的基本对象集合,特指表集合或者实体集合
/// </summary>
/// <returns></returns>
public List<ModelElement> GetObjectList()
{
List<ModelElement> list = new List<ModelElement>();
if (_mt == ModelType.Domain)
{
var classNodes = from element in root.Descendants(Const.o + "Class")
where element.Parent !=null
&& element.Parent.Name == Const.c + "Classes"
select element;
foreach (XElement n in classNodes)
{
ModelElement attr = GenerateElementFromNode(n);
list.Add(attr);
}
}
else
{
var tableNodes = from element in root.Descendants(Const.o + "Table")
where element.Parent != null
&& element.Parent.Name == Const.c + "Tables"
select element;
foreach (XElement n in tableNodes)
{
ModelElement attr = GenerateElementFromNode(n);
IEnumerable<XElement> tmp = n.Descendants(Const.a + "Comment");
if (tmp.Count<XElement>() > 0 )
{
attr.Comment = tmp.First<XElement>().Value;
}
list.Add(attr);
}
}
return list;
}
/// <summary>
/// 根据xml节点获取对应的ModelElement
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private ModelElement GenerateElementFromNode(XElement n)
{
ModelElement attr = new ModelElement();
attr.Code = GetElementValueFromClassTable(n.FirstAttribute.Value, "Code");
attr.CreationDate = GetElementValueFromClassTable(n.FirstAttribute.Value, "CreationDate");
attr.Creator = GetElementValueFromClassTable(n.FirstAttribute.Value, "Creator");
attr.ModificationDate = GetElementValueFromClassTable(n.FirstAttribute.Value, "ModificationDate");
attr.Modifier = GetElementValueFromClassTable(n.FirstAttribute.Value, "Modifier");
attr.Name = GetElementValueFromClassTable(n.FirstAttribute.Value, "Name");
attr.ObjectID = GetElementValueFromClassTable(n.FirstAttribute.Value, "ObjectID");
attr.Code = GetElementValueFromClassTable(n.FirstAttribute.Value, "Code");
return attr;
}
private String GetElementValueFromClassTable(string classID, string property)
{
IEnumerable<XElement> tmpList = from t2 in root.Descendants(Const.a + property)
where t2.Parent != null
&& t2.Parent.FirstAttribute != null
&& t2.Parent.FirstAttribute.Value == classID
select t2;
if (tmpList.Count<XElement>() == 0)
return String.Empty;
return tmpList.First<XElement>().Value;
}
/// <summary>
/// 根据对象ID找到属性列表
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
public List<ModelElement> GetAttributeList(string objectID)
{
List<ModelElement> list = new List<ModelElement>();
XElement node = FindNodeByObjectID(objectID);
string classOrTable = String.Empty;
if (_mt == ModelType.Domain)
{
classOrTable = "Attribute";
}
else
{
classOrTable = "Column";
}
IEnumerable<XElement> listAttr =
from el in root.Descendants(Const.o + classOrTable)
where el.Parent != null
&& el.Parent .Parent != null
&& el.Parent.Parent.FirstAttribute != null
&& FindNodeByObjectID(objectID) != null
&& FindNodeByObjectID(objectID).Parent != null
&& FindNodeByObjectID(objectID).Parent.FirstAttribute != null
&& el.Parent.Parent.FirstAttribute.Value == FindNodeByObjectID(objectID).Parent.FirstAttribute.Value
select el;
foreach (XElement n in listAttr)
{
ModelElement ma = GenerateElementFromNode(n);
list.Add(ma);
}
return list;
}
/// <summary>
/// 根据对象id(guid)找到对应的节点
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
private XElement FindNodeByObjectID(string objectID)
{
IEnumerable<XElement> list =
from el in root.Descendants(Const.a + "ObjectID")
where el.Value == objectID
select el;
if (list.Count<XElement>() > 0)
return list.First<XElement>();
else
return null;
}
}
/// 通过Xml分析powerdesigner模型文件
/// </summary>
public class ModelAnalyserLinq : IModelAnalyser
{
/// <summary>
/// Xml命名空间管理
/// </summary>
XmlNamespaceManager nsmgr = null;
/// <summary>
/// 属性列表,记录字段
/// </summary>
List<ModelElement> listAtt = new List<ModelElement>();
/// <summary>
/// 单元列表:记录领域对象列表或者数据库表对象列表
/// </summary>
List<ModelElement> listUnit = new List<ModelElement>();
/// <summary>
///
/// </summary>
ModelType _mt = ModelType.Domain;
/// <summary>
/// 一个ModelAnalyser对应一个XElement root
/// </summary>
XElement root = null;
public ModelAnalyserLinq(String fileName)
: this(fileName, ModelType.Domain)
{
try
{
//执行linq检索(element)
var classesNodes = from element in root.Descendants(Const.c + "Classes")
select element;
if (classesNodes.Count<XElement>() > 0)//说明存在类型,就是领域模型,数据库模型中不存在这个的
{
_mt = ModelType.Domain;
}
else
{
var tablesNodes = from element in root.Descendants(Const.c + "Tables")
select element;
if (tablesNodes.Count<XElement>() > 0)//说明存在类型,就是数据库模型
{
_mt = ModelType.Database;
}
else
{
throw new Exception("非法模型文件,系统只支持领域模型和数据库模型!");
}
}
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelAnalyserLinq(String fileName, ModelType mt)
{
try
{
_mt = mt;
root = XElement.Load(fileName);
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelType MT
{
get { return _mt; }
}
/// <summary>
/// 获取模型的基本对象集合,特指表集合或者实体集合
/// </summary>
/// <returns></returns>
public List<ModelElement> GetObjectList()
{
List<ModelElement> list = new List<ModelElement>();
if (_mt == ModelType.Domain)
{
var classNodes = from element in root.Descendants(Const.o + "Class")
where element.Parent !=null
&& element.Parent.Name == Const.c + "Classes"
select element;
foreach (XElement n in classNodes)
{
ModelElement attr = GenerateElementFromNode(n);
list.Add(attr);
}
}
else
{
var tableNodes = from element in root.Descendants(Const.o + "Table")
where element.Parent != null
&& element.Parent.Name == Const.c + "Tables"
select element;
foreach (XElement n in tableNodes)
{
ModelElement attr = GenerateElementFromNode(n);
IEnumerable<XElement> tmp = n.Descendants(Const.a + "Comment");
if (tmp.Count<XElement>() > 0 )
{
attr.Comment = tmp.First<XElement>().Value;
}
list.Add(attr);
}
}
return list;
}
/// <summary>
/// 根据xml节点获取对应的ModelElement
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private ModelElement GenerateElementFromNode(XElement n)
{
ModelElement attr = new ModelElement();
attr.Code = GetElementValueFromClassTable(n.FirstAttribute.Value, "Code");
attr.CreationDate = GetElementValueFromClassTable(n.FirstAttribute.Value, "CreationDate");
attr.Creator = GetElementValueFromClassTable(n.FirstAttribute.Value, "Creator");
attr.ModificationDate = GetElementValueFromClassTable(n.FirstAttribute.Value, "ModificationDate");
attr.Modifier = GetElementValueFromClassTable(n.FirstAttribute.Value, "Modifier");
attr.Name = GetElementValueFromClassTable(n.FirstAttribute.Value, "Name");
attr.ObjectID = GetElementValueFromClassTable(n.FirstAttribute.Value, "ObjectID");
attr.Code = GetElementValueFromClassTable(n.FirstAttribute.Value, "Code");
return attr;
}
private String GetElementValueFromClassTable(string classID, string property)
{
IEnumerable<XElement> tmpList = from t2 in root.Descendants(Const.a + property)
where t2.Parent != null
&& t2.Parent.FirstAttribute != null
&& t2.Parent.FirstAttribute.Value == classID
select t2;
if (tmpList.Count<XElement>() == 0)
return String.Empty;
return tmpList.First<XElement>().Value;
}
/// <summary>
/// 根据对象ID找到属性列表
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
public List<ModelElement> GetAttributeList(string objectID)
{
List<ModelElement> list = new List<ModelElement>();
XElement node = FindNodeByObjectID(objectID);
string classOrTable = String.Empty;
if (_mt == ModelType.Domain)
{
classOrTable = "Attribute";
}
else
{
classOrTable = "Column";
}
IEnumerable<XElement> listAttr =
from el in root.Descendants(Const.o + classOrTable)
where el.Parent != null
&& el.Parent .Parent != null
&& el.Parent.Parent.FirstAttribute != null
&& FindNodeByObjectID(objectID) != null
&& FindNodeByObjectID(objectID).Parent != null
&& FindNodeByObjectID(objectID).Parent.FirstAttribute != null
&& el.Parent.Parent.FirstAttribute.Value == FindNodeByObjectID(objectID).Parent.FirstAttribute.Value
select el;
foreach (XElement n in listAttr)
{
ModelElement ma = GenerateElementFromNode(n);
list.Add(ma);
}
return list;
}
/// <summary>
/// 根据对象id(guid)找到对应的节点
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
private XElement FindNodeByObjectID(string objectID)
{
IEnumerable<XElement> list =
from el in root.Descendants(Const.a + "ObjectID")
where el.Value == objectID
select el;
if (list.Count<XElement>() > 0)
return list.First<XElement>();
else
return null;
}
}

class Const
{
public readonly static XNamespace a = "attribute", c = "collection", o = "object";
public const string cClasses = "c:Classes";
public const string oClass = "o:Class";
public const string cAttributes = "c:Attributes";
public const string oAttribute = "o:Attribute";
public const string cTables = "c:Tables";
public const string oTable = "o:Table";
public const string cColumns = "c:Columns";
public const string oColumn = "o:Column";
}
{
public readonly static XNamespace a = "attribute", c = "collection", o = "object";
public const string cClasses = "c:Classes";
public const string oClass = "o:Class";
public const string cAttributes = "c:Attributes";
public const string oAttribute = "o:Attribute";
public const string cTables = "c:Tables";
public const string oTable = "o:Table";
public const string cColumns = "c:Columns";
public const string oColumn = "o:Column";
}

interface IModelAnalyser
{
List<ModelElement> GetAttributeList(string objectID);
List<ModelElement> GetObjectList();
ModelType MT { get; }
}
/// <summary>
/// xml节点entity,可以指定类型:table,class,column,attribute等
/// </summary>
public class ModelElement
{
/// <summary>
/// 重写ToString(),给ListView显示用
/// </summary>
/// <returns></returns>
public override string ToString()
{
return Name + Code + (String.IsNullOrEmpty(Comment) ? "" : Comment);
}
//<a:ObjectID>DE001EE1-B9D8-4904-AA97-1CB93DAE107E</a:ObjectID>
public string ObjectID { get; set; }
//<a:Name>类型</a:Name>
public string Name { get; set; }
//<a:Code>类型</a:Code>
public string Code { get; set; }
//<a:CreationDate>1271233784</a:CreationDate>
public string CreationDate { get; set; }
//<a:Creator>xiaxilin</a:Creator>
public string Creator { get; set; }
//<a:ModificationDate>1271233784</a:ModificationDate>
public string ModificationDate { get; set; }
//<a:Modifier>xiaxilin</a:Modifier>
public string Modifier { get; set; }
//<a:DataType>java.lang.String</a:DataType>
public string DataType { get; set; }
//<a:Attribute.Visibility>-</a:Attribute.Visibility>
public string Visibility { get; set; }
//<a:Comment>-</a:Comment>
public string Comment { get; set; }
}
/// <summary>
/// 模型类型
/// </summary>
public enum ModelType
{
/// <summary>
/// 领域模型
/// </summary>
Domain = 0,
/// <summary>
/// 数据库模型
/// </summary>
Database = 1
}
{
List<ModelElement> GetAttributeList(string objectID);
List<ModelElement> GetObjectList();
ModelType MT { get; }
}
/// <summary>
/// xml节点entity,可以指定类型:table,class,column,attribute等
/// </summary>
public class ModelElement
{
/// <summary>
/// 重写ToString(),给ListView显示用
/// </summary>
/// <returns></returns>
public override string ToString()
{
return Name + Code + (String.IsNullOrEmpty(Comment) ? "" : Comment);
}
//<a:ObjectID>DE001EE1-B9D8-4904-AA97-1CB93DAE107E</a:ObjectID>
public string ObjectID { get; set; }
//<a:Name>类型</a:Name>
public string Name { get; set; }
//<a:Code>类型</a:Code>
public string Code { get; set; }
//<a:CreationDate>1271233784</a:CreationDate>
public string CreationDate { get; set; }
//<a:Creator>xiaxilin</a:Creator>
public string Creator { get; set; }
//<a:ModificationDate>1271233784</a:ModificationDate>
public string ModificationDate { get; set; }
//<a:Modifier>xiaxilin</a:Modifier>
public string Modifier { get; set; }
//<a:DataType>java.lang.String</a:DataType>
public string DataType { get; set; }
//<a:Attribute.Visibility>-</a:Attribute.Visibility>
public string Visibility { get; set; }
//<a:Comment>-</a:Comment>
public string Comment { get; set; }
}
/// <summary>
/// 模型类型
/// </summary>
public enum ModelType
{
/// <summary>
/// 领域模型
/// </summary>
Domain = 0,
/// <summary>
/// 数据库模型
/// </summary>
Database = 1
}

/// <summary>
/// 通过Xml分析powerdesigner模型文件
/// </summary>
public class ModelAnalyser : IModelAnalyser
{
/// <summary>
/// Xml命名空间管理
/// </summary>
XmlNamespaceManager nsmgr = null;
/// <summary>
/// 属性列表,记录字段
/// </summary>
List<ModelElement> listAtt = new List<ModelElement>();
/// <summary>
/// 单元列表:记录领域对象列表或者数据库表对象列表
/// </summary>
List<ModelElement> listUnit = new List<ModelElement>();
/// <summary>
///
/// </summary>
ModelType _mt = ModelType.Domain;
/// <summary>
/// 一个ModelAnalyser对应一个xmldocument
/// </summary>
XmlDocument xd = new XmlDocument();
public ModelAnalyser(String fileName)
: this(fileName, ModelType.Domain)
{
try
{
XmlNode node = xd.SelectSingleNode("//" + Const.cClasses, nsmgr);
if (node != null)//说明存在类型,就是领域模型,数据库模型中不存在这个的
{
_mt = ModelType.Domain;
}
else
{
XmlNode node2 = xd.SelectSingleNode("//" + Const.cTables, nsmgr);
if (node2 != null)//说明存在类型,就是数据库模型
{
_mt = ModelType.Database;
}
else
{
throw new Exception("非法模型文件,系统只支持领域模型和数据库模型!");
}
}
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelAnalyser(String fileName, ModelType mt)
{
try
{
_mt = mt;
xd.Load(fileName);
nsmgr = new XmlNamespaceManager(xd.NameTable);
nsmgr.AddNamespace("a", "attribute");
nsmgr.AddNamespace("c", "collection");
nsmgr.AddNamespace("o", "object");
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelType MT
{
get { return _mt; }
}
/// <summary>
/// 获取模型的基本对象集合,特指表集合或者实体集合
/// </summary>
/// <returns></returns>
public List<ModelElement> GetObjectList()
{
List<ModelElement> list = new List<ModelElement>();
if (_mt == ModelType.Domain)
{
XmlNode node = xd.SelectSingleNode("//" + Const.cClasses, nsmgr);
if (node != null)
{
foreach (XmlNode n in node.ChildNodes)
{
ModelElement attr = GenerateElementFromNode(n);
list.Add(attr);
}
}
}
else
{
XmlNode node = xd.SelectSingleNode("//" + Const.cTables, nsmgr);
if (node != null)
{
foreach (XmlNode n in node.ChildNodes)
{
ModelElement attr = GenerateElementFromNode(n);
XmlNode tmp = n.SelectSingleNode("a:Comment", nsmgr);
if (tmp != null)
{
attr.Comment = tmp.InnerText;
}
list.Add(attr);
}
}
}
return list;
}
/// <summary>
/// 根据xml节点获取对应的ModelElement
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private ModelElement GenerateElementFromNode(XmlNode n)
{
ModelElement attr = new ModelElement();
attr.Code = n.SelectSingleNode("a:Code", nsmgr).InnerText;
attr.CreationDate = n.SelectSingleNode("a:CreationDate", nsmgr).InnerText;
attr.Creator = n.SelectSingleNode("a:Creator", nsmgr).InnerText;
attr.ModificationDate = n.SelectSingleNode("a:ModificationDate", nsmgr).InnerText;
attr.Modifier = n.SelectSingleNode("a:Modifier", nsmgr).InnerText;
attr.Name = n.SelectSingleNode("a:Name", nsmgr).InnerText;
attr.ObjectID = n.SelectSingleNode("a:ObjectID", nsmgr).InnerText;
return attr;
}
/// <summary>
/// 根据对象ID找到属性列表
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
public List<ModelElement> GetAttributeList(string objectID)
{
List<ModelElement> list = new List<ModelElement>();
XmlNode node = FindNodeByObjectID(objectID);
foreach (XmlNode n in node.ChildNodes)
{
ModelElement ma = GenerateElementFromNode(n);
list.Add(ma);
}
return list;
}
/// <summary>
/// 根据对象id(guid)找到对应的节点
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
private XmlNode FindNodeByObjectID(string objectID)
{
XmlNodeList nodeList = null;
if (_mt == ModelType.Domain)
{
nodeList = xd.SelectSingleNode("//" + Const.cClasses, nsmgr).ChildNodes;
}
else
{
nodeList = xd.SelectSingleNode("//" + Const.cTables, nsmgr).ChildNodes;
}
foreach (XmlNode n in nodeList)
{
if (n.SelectSingleNode("a:ObjectID", nsmgr).InnerText == objectID)
{
if (_mt == ModelType.Domain)
{
return n.SelectSingleNode("//" + Const.cAttributes, nsmgr);
}
else
{
return n.SelectSingleNode("//" + Const.cColumns, nsmgr);
}
}
}
return null;
}
}
/// 通过Xml分析powerdesigner模型文件
/// </summary>
public class ModelAnalyser : IModelAnalyser
{
/// <summary>
/// Xml命名空间管理
/// </summary>
XmlNamespaceManager nsmgr = null;
/// <summary>
/// 属性列表,记录字段
/// </summary>
List<ModelElement> listAtt = new List<ModelElement>();
/// <summary>
/// 单元列表:记录领域对象列表或者数据库表对象列表
/// </summary>
List<ModelElement> listUnit = new List<ModelElement>();
/// <summary>
///
/// </summary>
ModelType _mt = ModelType.Domain;
/// <summary>
/// 一个ModelAnalyser对应一个xmldocument
/// </summary>
XmlDocument xd = new XmlDocument();
public ModelAnalyser(String fileName)
: this(fileName, ModelType.Domain)
{
try
{
XmlNode node = xd.SelectSingleNode("//" + Const.cClasses, nsmgr);
if (node != null)//说明存在类型,就是领域模型,数据库模型中不存在这个的
{
_mt = ModelType.Domain;
}
else
{
XmlNode node2 = xd.SelectSingleNode("//" + Const.cTables, nsmgr);
if (node2 != null)//说明存在类型,就是数据库模型
{
_mt = ModelType.Database;
}
else
{
throw new Exception("非法模型文件,系统只支持领域模型和数据库模型!");
}
}
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelAnalyser(String fileName, ModelType mt)
{
try
{
_mt = mt;
xd.Load(fileName);
nsmgr = new XmlNamespaceManager(xd.NameTable);
nsmgr.AddNamespace("a", "attribute");
nsmgr.AddNamespace("c", "collection");
nsmgr.AddNamespace("o", "object");
}
catch (Exception e)
{
MessageBox.Show("读取model出错!\r\n" + e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public ModelType MT
{
get { return _mt; }
}
/// <summary>
/// 获取模型的基本对象集合,特指表集合或者实体集合
/// </summary>
/// <returns></returns>
public List<ModelElement> GetObjectList()
{
List<ModelElement> list = new List<ModelElement>();
if (_mt == ModelType.Domain)
{
XmlNode node = xd.SelectSingleNode("//" + Const.cClasses, nsmgr);
if (node != null)
{
foreach (XmlNode n in node.ChildNodes)
{
ModelElement attr = GenerateElementFromNode(n);
list.Add(attr);
}
}
}
else
{
XmlNode node = xd.SelectSingleNode("//" + Const.cTables, nsmgr);
if (node != null)
{
foreach (XmlNode n in node.ChildNodes)
{
ModelElement attr = GenerateElementFromNode(n);
XmlNode tmp = n.SelectSingleNode("a:Comment", nsmgr);
if (tmp != null)
{
attr.Comment = tmp.InnerText;
}
list.Add(attr);
}
}
}
return list;
}
/// <summary>
/// 根据xml节点获取对应的ModelElement
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
private ModelElement GenerateElementFromNode(XmlNode n)
{
ModelElement attr = new ModelElement();
attr.Code = n.SelectSingleNode("a:Code", nsmgr).InnerText;
attr.CreationDate = n.SelectSingleNode("a:CreationDate", nsmgr).InnerText;
attr.Creator = n.SelectSingleNode("a:Creator", nsmgr).InnerText;
attr.ModificationDate = n.SelectSingleNode("a:ModificationDate", nsmgr).InnerText;
attr.Modifier = n.SelectSingleNode("a:Modifier", nsmgr).InnerText;
attr.Name = n.SelectSingleNode("a:Name", nsmgr).InnerText;
attr.ObjectID = n.SelectSingleNode("a:ObjectID", nsmgr).InnerText;
return attr;
}
/// <summary>
/// 根据对象ID找到属性列表
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
public List<ModelElement> GetAttributeList(string objectID)
{
List<ModelElement> list = new List<ModelElement>();
XmlNode node = FindNodeByObjectID(objectID);
foreach (XmlNode n in node.ChildNodes)
{
ModelElement ma = GenerateElementFromNode(n);
list.Add(ma);
}
return list;
}
/// <summary>
/// 根据对象id(guid)找到对应的节点
/// </summary>
/// <param name="objectID"></param>
/// <returns></returns>
private XmlNode FindNodeByObjectID(string objectID)
{
XmlNodeList nodeList = null;
if (_mt == ModelType.Domain)
{
nodeList = xd.SelectSingleNode("//" + Const.cClasses, nsmgr).ChildNodes;
}
else
{
nodeList = xd.SelectSingleNode("//" + Const.cTables, nsmgr).ChildNodes;
}
foreach (XmlNode n in nodeList)
{
if (n.SelectSingleNode("a:ObjectID", nsmgr).InnerText == objectID)
{
if (_mt == ModelType.Domain)
{
return n.SelectSingleNode("//" + Const.cAttributes, nsmgr);
}
else
{
return n.SelectSingleNode("//" + Const.cColumns, nsmgr);
}
}
}
return null;
}
}
分类:
.net language
, csharp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述