小学生之解析XML应用

1.什么是XML?

解析:XML:Extensible Markup Language(可扩展标记语言)

        HTMLHyperLink Text  Markup Language(超文本标记语言)

 2. xml文件和html文件的区别?

  解析:01.xml严格区分大小写,html不区分

          02.xml不是编译语言,xmlhtml都是解释型语言

          03.html语言负责显示数据,而Xml文件就是专门用来存储数据

注:如果我们在书写xml文件的时候,如果自己用的encoding="utf-8"出现问题,那么试着切成gb2312

3.xml书写注意点

  1.xml文件严格区分大小写
  2.标签配对出现
  3.xml文档只能有一个根节点
  4.我们自定义xml文档中的标签

4.解析xml文件

  解析:01.做一个xml文档

          02.copydebug目录下

          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显示频道对应节目单

 

小学生之解析XML应用

 

主要代码如下:

 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         }

 

 

你可能感兴趣的:(解析xml)