2009-02-23

C# – Recursion & XmlTextWriter

image

最近因為程式的需要,必須提供一個功能給使用者 就是能讓他們自己建立TreeNode 這個部分相當簡單。。 只要去指定每個TreeNode的ContextMenuStrip屬性

   1:  TreeNode tnAdd = new TreeNode(NodeName);
   2:  tnAdd.ContextMenuStrip = contextMenuStrip1;

只是使用者還需要一個功能 就是能將所建立的Tree整個備份下來 當然,我直覺想到的是XML格式 因為除了要儲存每個Node名稱外 也需要儲存相關Node的資訊(像是Folder資訊、Document資訊) 在這裡我使用兩個主要的方式
1.Recursion(遞迴)
2.XmlTextWriter物件
使用Recursion是因為我並不清楚 底下會長出多少個Node,也就是我不清楚要用多少個迴圈 來找出所有的Node,利用Recursion 可以讓我不需要知道,也可以一層一層找下去 在寫Xml檔案時,我使用XmlTextWriter物件

   1:  string strFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
   2:  strFolder=string.Format(@"{0}\{1}",strFolder,"DDA.xml"); 
   3:  //---Xml write---- 
   4:  using (XmlTextWriter xtw = new XmlTextWriter(strFolder, Encoding.UTF8)) 
   5:  { 
   6:    xtw.Formatting = Formatting.Indented;
   7:    xtw.WriteStartDocument();
   8:    xtw.WriteStartElement("List"); 
   9:    WriteElement(xtw, tvList.Nodes); 
  10:    xtw.WriteEndDocument(); 
  11:  }
  12:   
  13:  //---Recursion---- 
  14:  private void WriteElement(XmlTextWriter xtwThis, TreeNodeCollection tnCurrentNodes) 
  15:  { 
  16:    foreach (TreeNode thisNode in tnCurrentNodes) 
  17:    { 
  18:      xtwThis.WriteStartElement(thisNode.Text); 
  19:      if (thisNode.Nodes.Count>0) 
  20:      { 
  21:          WriteElement(xtwThis, thisNode.Nodes); 
  22:      } 
  23:    xtwThis.WriteEndElement();
  24:    } 
  25:  } 
  26:   

簡單寫下這些紀錄,可以供以後做參考用 在寫這支程式時,遇到一個小問題 就是我嘗試要在XML的主目錄下,建立多個Element 這會產生錯誤,在主目錄中只能增加一個Element 不曉得是不是這樣,先記錄下來。

參考資料
1.
http://chrisbalboa.wordpress.com/2007/10/02/aspnetxmltextwriter-demo-%E7%AF%84%E4%BE%8B/
2.
http://www.builder.com.cn/2007/0924/521705.shtml
3.
http://www.cnblogs.com/chen79/archive/2008/01/05/1027064.html

沒有留言:

張貼留言