程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 小學生之解析XML應用,小學生解析xml

小學生之解析XML應用,小學生解析xml

編輯:C#入門知識

小學生之解析XML應用,小學生解析xml


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         }

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved