你的位置:首页 > ASP.net教程

[ASP.net教程]小学生之解析XML应用

1.什么是XML?

解析:可扩展标记语言)

        HTML:HyperLink Text  Markup Language(超文本标记语言)

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

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

          02.不是编译语言,和html都是解释型语言

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

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

3.书写注意点

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

4.解析文件

  解析:01.做一个文档

          02.copy到debug目录下

          03.创建一个对象 Ctrl+.导入命名空间

         04.调用doc.Load(“路径”)

         05.拿到根节点  

         06.用foreach来获取子节点内容

5.问题记录

 01.Load(string filename):绝对路径:"D:\123\Singer.

 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 ChannelBase3   {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       new 10       doc.Load(path);11       if (programList==null)12       {13         programList=new List<TvProgram>();14       }15        doc.DocumentElement;16       foreach (in root.ChildNodes)17       {18         if (item.Name=="tvProgramTable")19         {20           foreach (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       new  8       doc.Load(path); 9       if (programList == null)10       {11         programList = new List<TvProgram>();12       }13        doc.DocumentElement;
          //解析14 foreach (in root.ChildNodes)15 {16 if (item.Name == "ProgramList")17 {18 foreach (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      new  8      doc.Load("files/FullChannels."); 9       doc.DocumentElement;10      foreach (in node.ChildNodes)11       {12        ChannelBase channel = CreateChannel(item["channelType"].InnerText);//创建频道A或者B对象13        channel.channelName = item["tvChannel"].InnerText;//获取14        channel.path = item["path"].InnerText;//获取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)//判断深度为132       {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     }