c#如何?從xml中載入樹目錄,並且顯示完整的Text

來源:互聯網
上載者:User

標籤:datagridview   c#   分類樹   

    談到xml,相信有一定編程基礎的童鞋們都比較清楚了。xml檔案格式類似於嵌套的樣式,這種獨特的階層很容易使我們聯想到分類樹,因此這不禁讓我們對兩者之間產生一種牽線的想法。這不禁,使我們有這麼一個問題:如何將xml儲存的資料轉換成分類樹形式??

    首先我先貼一段xml代碼:

 <nativeplace>    <China text="中國" value="中國">      <ShanDong text="山東" value="山東">        <JiNing text="濟寧" value="濟寧">          <RenChengQu text="任城區" value="任城區">            <ChangGouZhen text="長溝鎮" value="長溝鎮">            </ChangGouZhen>          </ReChengQu>        </JiNing>    </ShanDong>    </China></nativeplace>


    這段代碼很清楚的展示給我們他們之間的層次關係,接下來,我們就將此xml中的地區與c#的TreeView進行聯絡,從而達到我們想要的分類樹效果。

   首先我們需要將xml載入到TreeView中。載入xml也就是我們所說的找到xml然後讀取xml內容。在這裡我多介紹一段關於尋找程式集路徑的代碼,我做項目習慣於將xml檔案放在程式集bin/Debug下,原因也是c#提供了此訪問方式。

   接下來的一段代碼便是讀取項目的程式集Debug路徑的方法:

public String GetAssemblyFileDirectory(){#region 變數說明String FilePath, StringX;FileInfo FileInfoX;//這裡我建立的操作檔案夾的類,當然你你也可以用其它方式Uri UriX;#endregion#region 擷取.dll的位置//擷取.dll檔案的位置,主要是用於確定資料庫檔案StringX = Assembly.GetCallingAssembly().CodeBase;//產生一個URI,以用於解析UriX = new Uri(StringX);//擷取設定檔的目錄FileInfoX = new FileInfo(UriX.LocalPath);FilePath = FileInfoX.DirectoryName;//if (!(FilePath.Substring(FilePath.Length - 1, 1) == @"\"))//{ FilePath = String.Concat(FilePath, @"\"); }return FilePath;#endregion}
  這樣我們就擷取了xml檔案的位置,接下來我們所做的就是載入xml檔案。具體代碼如下:

 helper = new Helper();//此類中包含了擷取程式集目錄的方法            xmlpath = helper.GetAssemblyFileDirectory() + "/Resources/Dictionary.xml";            XmlDocument xmldoc = new XmlDocument(); //建立xml文檔類            xmldoc.Load(xmlpath);//載入xml文檔            xmlNode = xmldoc.DocumentElement.SelectSingleNode("nativeplace");//擷取結點nativeplace            nodes = xmlNode.ChildNodes;//擷取nativeplace結點下的所有孩子結點,此孩子是真孩子結點,並非所有的“後代”結點            bindXmlToTreeView(nodes, nativePlaceTreeView.Nodes);//該方法是將xml結點載入到TreeView分類樹中
接下來我們所做的便是如何遍曆nativeplace下所有子結點以及孫子結點等。方法如下:

public void bindXmlToTreeView(XmlNodeList nodeList, TreeNodeCollection treeNode)        {            foreach (XmlNode node in nodeList)            {                XmlElement xe = (XmlElement)node; //建立一個xml元素,將擷取的每一個結點轉換成xml元素,方便對其進行屬性賦值。                TreeNode newTreeNode = new TreeNode();//建立一個新的treenode,將xmlnode中資訊存到treenode中。                newTreeNode.Text = xe.GetAttribute("text");                newTreeNode.Name = xe.GetAttribute("value");                treeNode.Add(newTreeNode);//將建立並包含資訊的treenode載入到treenode集合中。                if (node.HasChildNodes)                {                    bindXmlToTreeView(node.ChildNodes, newTreeNode.Nodes);//孫子結點載入                }            }        }
   這樣我們就建立好了一個分類樹,接下來我展示一下我之前建立好的一個分類樹的:



有時我們需要擷取treenode的text,然而,當我們點擊一個結點時如何擷取完整的結點名呢(就是加上其所有父節點的text)?,其實我們可以這樣來實現:

 private void okButton_Click(object sender, EventArgs e)        {            parentNode(nativePlaceTreeView.SelectedNode);//這裡是將擷取的點擊結點傳遞過去                        this.Close();        }

 private void parentNode(TreeNode text)        {            TreeNode fullText = text;            while (text.Parent != null)            {                fullText.Text = text.Parent.Text +fullText.Text;//這樣總是擷取結點的父節點text。                text = text.Parent;//我們text結點是傳遞過來的點擊結點,然後不斷將其父節點賦值給它,這樣就可以向上推上去了。知道treeview中的根節點。            }            nativeplace["address"] = fullText.Text;//這裡只是將結點的文本複製給傳遞過來的datarow相應的列,大家可以不用管,現在你可以用監視去查看一下fullText.Text就會顯示完整的目錄名了。        }

點擊確定按鈕,則在datagridview中顯示詳細的名字:


至此xml載入到treeview的方法介紹完畢!



   再次祝大家元宵節快樂!!

c#如何?從xml中載入樹目錄,並且顯示完整的Text

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.