我在使用C#中Treeview與解析XML遇到的問題
發(fā)表時(shí)間:2024-02-17 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
近日我在用C#將PDM中相關(guān)內(nèi)容導(dǎo)入到TreeView的過程中,遇到一個(gè)很奇怪的問題,請(qǐng)各位大蝦指點(diǎn),謝謝! private void ReadXml(string strFileName)
{
try
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("c:\xxx.pdm");
TreeNode rootNode = new TreeNode("PDM原始文檔結(jié)構(gòu)");
trvXML.Nodes.Clear();
this.trv_end.Nodes.Clear();
tn_end2=new TreeNode("PDM表結(jié)構(gòu)");
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表結(jié)構(gòu)功能樹
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表結(jié)構(gòu)功能樹完畢
//填充表各列字段
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);
}
}