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 }