1.什么是XML?
解析:XML:ExtensibleMarkupLanguage(可扩展标记语言)
HTML:HyperLinkTextMarkupLanguage(超文本标记语言)
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.拿到根节点XmlNoderoot=doc.DocumentElement;
06.用foreach来获取子节点内容
5.问题记录
01.Load(stringfilename):绝对路径:"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 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 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)//判断深度为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 }
新闻热点
疑难解答