学院首页>网络编程>ASP.NET>我在使用C#中Treeview与解析XML遇到的问题

我在使用C#中Treeview与解析XML遇到的问题

作者: 来源: 添加时间:2006-5-25 20:11:45
 近日我在用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);
}
  }


站内搜索