1.什麼是XML?
解析:XML:Extensible Markup Language(可擴展標記語言)
HTML:HyperLink Text Markup Language(超文本標記語言)
2. xml文件和html文件的區別?
解析:01.xml嚴格區分大小寫,html不區分
02.xml不是編譯語言,xml和html都是解釋型語言
03.html語言負責顯示數據,而Xml文件就是專門用來存儲數據
注:如果我們在書寫xml文件的時候,如果自己用的encoding="utf-8"出現問題,那麼試著切成gb2312
3.xml書寫注意點
1.xml文件嚴格區分大小寫
2.標簽配對出現
3.xml文檔只能有一個根節點
4.我們自定義xml文檔中的標簽
4.解析xml文件
解析:01.做一個xml文檔
02.copy到debug目錄下
03.創建一個XmlDocument對象 Ctrl+.導入命名空間
04.調用doc.Load(“路徑”)
05.拿到根節點 XmlNode root=doc.DocumentElement;
06.用foreach來獲取子節點內容
5.問題記錄
01.Load(string filename):絕對路徑:"D:\123\Singer.xml"
02.item.Name指定的是<內容> ,item.InnerText指的是<>內容</>
6.練習
需求說明 單擊電視台頻道節點,DataGridView顯示頻道對應節目單

主要代碼如下:
1 //電視節目類
2 public class TvProgram
3 {
4 //播出時間
5 public DateTime PlayTime { get; set; }
6
7 //時段
8 public string Median { get; set; }
9 //節目名稱
10 public string ProgramName { get; set; }
11 //節目文件路勁
12 public string FilePath { get; set; }
13 }
1 //頻道類
2 public abstract class ChannelBase
3 {
4 public string channelName;//頻道名稱
5 public string path;//頻道路勁
6 public List<TvProgram> programList;//節目列表
7 //解析頻道節目信息
8 public abstract void Fetch();
9 }
1 //TypeA類頻道類
2 public class TypeAChannel:ChannelBase
3 {
4 public TypeAChannel() { }
5
6
7 public override void Fetch()
8 {
9 XmlDocument doc = new XmlDocument();
10 doc.Load(path);
11 if (programList==null)
12 {
13 programList=new List<TvProgram>();
14 }
15 XmlNode root = doc.DocumentElement;
16 foreach (XmlNode item in root.ChildNodes)
17 {
18 if (item.Name=="tvProgramTable")
19 {
20 foreach (XmlNode child in item.ChildNodes)
21 {
22 TvProgram program = new TvProgram();
23 program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
24 program.Median = child["meridien"].InnerText;
25 program.ProgramName = child["programName"].InnerText;
26 program.FilePath = child["path"].InnerText;
27 this.programList.Add(program);
28 }
29 }
30 }
31 }
32 }
1 //頻道B類
2 public class TypeBChannel:ChannelBase
3 {
4
5 public override void Fetch()
6 {
7 XmlDocument doc = new XmlDocument();
8 doc.Load(path);
9 if (programList == null)
10 {
11 programList = new List<TvProgram>();
12 }
13 XmlNode root = doc.DocumentElement;
//解析XMl文件並填充數據
14 foreach (XmlNode item in root.ChildNodes)
15 {
16 if (item.Name == "ProgramList")
17 {
18 foreach (XmlNode child in item.ChildNodes)
19 {
20 TvProgram program = new TvProgram();
21 program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
22 program.FilePath = child["path"].InnerText;
23 program.ProgramName = child["name"].InnerText;
24 this.programList.Add(program);
25 }
26 }
27 }
28 }
29 }
1 //工廠操作類
2 public class ChannelManager
3 {
4 public Dictionary<string, ChannelBase> dic = new Dictionary<string, ChannelBase>();//存儲頻道名稱和該頻道中的節目信息
5 public void LoadtvChannel()
6 {
7 XmlDocument doc = new XmlDocument();
8 doc.Load("files/FullChannels.xml");
9 XmlNode node = doc.DocumentElement;
10 foreach (XmlNode item in node.ChildNodes)
11 {
12 ChannelBase channel = CreateChannel(item["channelType"].InnerText);//創建頻道A或者B對象
13 channel.channelName = item["tvChannel"].InnerText;//獲取XML中頻道名稱
14 channel.path = item["path"].InnerText;//獲取XML中存儲的相應頻道節目路勁
15 dic.Add(channel.channelName,channel);
16 }
17 }
18 //創建類的實例
19 public ChannelBase CreateChannel(string type)
20 {
21 ChannelBase channel = null;
22 switch (type)
23 {
24 case"TypeA":
25 channel = new TypeAChannel();
26 break;
27 case"TypeB":
28 channel = new TypeBChannel();
29 break;
30 default:
31 break;
32 }
33 return channel;
34 }
35 }
1 //創建ChannelManagement類對象
2 ChannelManager manager = new ChannelManager();
3 //加載TreeView中的數據
4 private void LoadTreeView()
5 {
6 TreeNode nodeFristLevel = new TreeNode("我的電視台");
7 this.tvChannel.Nodes.Add(nodeFristLevel);
8 TreeNode allnode = new TreeNode("所有電視台");
9 TreeNode node = null;
10 manager.LoadtvChannel();
11 //循環給“所有電視台”添加子節點
12 foreach (ChannelBase item in manager.dic.Values)
13 {
14 node = new TreeNode(item.channelName);
15 node.Tag = item;//保存ChannelBse對象
16 allnode.Nodes.Add(node);
17 }
18 this.tvChannel.Nodes.Add(allnode);
19 }
20 private void Form1_Load(object sender, EventArgs e)
21 {
22 //皮膚設置
23 skinEngine1.SkinFile = "MSN.ssk";
24 //調用方法
25 LoadTreeView();
26
27 }
28 //TreeView點擊後事件
29 private void tvChannel_AfterSelect(object sender, TreeViewEventArgs e)
30 {
31 if (this.tvChannel.SelectedNode.Level==1)//判斷深度為1
32 {
33 ChannelBase channel = (ChannelBase)tvChannel.SelectedNode.Tag;
34 if (channel.programList != null)//清空List<T>集合中的數據
35 {
36 channel.programList.Clear();
37 }
38 channel.Fetch();
39 this.dgvProgList.DataSource = channel.programList;//綁定數據源
40 }
41
42 }