zoukankan      html  css  js  c++  java
  • 小学生之解析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显示频道对应节目单

    主要代码如下:

     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         }

     

  • 相关阅读:
    02
    循环语句的注意点
    unsigned/signed int/char类型表示的数值范围
    C程序设计语言(第二版)--- 习题选
    第一篇来自博客园的博客--哈哈希望大家点赞
    脆弱的GPS系统--摘抄《环球科学》
    【Python入门自学笔记专辑】——函数式编程
    c++标准库conio.h文件
    推荐几个配色和图标网站
    Ajax实现简单下拉选项
  • 原文地址:https://www.cnblogs.com/1600kun/p/4649823.html
Copyright © 2011-2022 走看看