近日我在用C#将PDM中相关内容导入到TreeView的过程中,遇到一个很奇怪的问题,请各位大虾指点,谢谢!
private void ReadXml(string strFileName)
{
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("c:\xxx.pdm");
TreeNode rootNode = new TreeNode("PDM原始文档结构");
trvXML.Nodes.Clear();
this.trv_end.Nodes.Clear();
tn_end2=new TreeNode("PDM表结构");
trv_end.Nodes.Add(tn_end2);
XmlNodeList rootList = xmlDoc.ChildNodes;
foreach(XmlNode xmlnode in rootList)
{
TreeNode tn = new TreeNode(xmlnode.Name);
if (xmlnode.HasChildNodes)
{
rootNode.Nodes.Add(tn);
AnalyseXML(xmlnode, tn);
}
}
this.trvXML.Nodes.Add(rootNode);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void AnalyseXML(XmlNode node, TreeNode tnode)
{
try
{
XmlNodeList xnlAll = node.ChildNodes;
TreeNode tn_end=new TreeNode();
TreeNode tn=new TreeNode();
string strChineseName="";
bool TagFlag=false;
bool TagFlag2=false;
foreach(XmlNode snode in xnlAll)
{
//形成PDM原始文档功能树
if(snode.NodeType==XmlNodeType.Text)
{
tn = new TreeNode(snode.Value+"["+snode.NodeType.ToString()+"]");
}
else
{
tn=new TreeNode(snode.Name+"("+snode.NodeType.ToString()+")");
}
//形成PDM原始文档功能树完毕
//填充PDM表结构功能树
if(snode.NodeType==XmlNodeType.Element&&snode.ParentNode.Name.Equals("o:Table"))
{
//获取表中文名
if(snode.Name.Equals("a:Name"))
{
strChineseName=snode.FirstChild.Value;
}
//表英文名
if(snode.Name.Equals("a:Code"))
{
tn_end=new TreeNode(strChineseName+"["+snode.FirstChild.Value+"]",100,100);
this.trv_end.TopNode.Nodes.Add(tn_end);
this.trv_end.SelectedNode=tn_end;
tn_end2=tn_end;
TagFlag=true;
}
//表说明
if(snode.Name.Equals("a:Comment"))
{
TagFlag2=true;
tn_end.Tag=snode.FirstChild.Value+"["+tn_end.Text.Substring(tn_end.Text.IndexOf("[")+1,tn_end.Text.IndexOf("_")-tn_end.Text.IndexOf("["));
}
if(TagFlag&&!TagFlag2)
{
tn_end.Tag="["+tn_end.Text.Substring(tn_end.Text.IndexOf("[")+1,tn_end.Text.IndexOf("_",tn_end.Text.IndexOf("["))-tn_end.Text.IndexOf("["));
}
}
//填充PDM表结构功能树完毕
//填充表各列字段
if(snode.ParentNode.Name.Equals("o:Column")&&snode.ParentNode.ParentNode.Name.Equals("c:Columns"))
{
if(snode.Name.Equals("a:Name"))
{
tn_end=new TreeNode(snode.FirstChild.Value,1000,1000);
trv_end.SelectedNode.Nodes.Add(tn_end);
trv_end.SelectedNode=tn_end;
}
//字段英文名
if(snode.Name.Equals("a:Code"))
{
tn_end=new TreeNode(snode.FirstChild.Value);
trv_end.SelectedNode.Nodes.Add(tn_end);
}
//字段描述
if(snode.Name.Equals("a:Comment"))
{
tn_end=new TreeNode(snode.FirstChild.Value);
trv_end.SelectedNode.Nodes.Add(tn_end);
}
//字段类型
if(snode.Name.Equals("a:DataType"))
{
tn_end=new TreeNode(snode.FirstChild.Value);
trv_end.SelectedNode.Nodes.Add(tn_end);
trv_end.SelectedNode=tn_end2;
}
}
//各列字段填充完毕
tnode.Nodes.Add(tn);
if (snode.HasChildNodes)
{
AnalyseXML(snode, tn);
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}