小学生之解析XML应用
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显示频道对应节目单

主要代码如下:
//电视节目类
public class TvProgram
{
//播出时间
public DateTime PlayTime { get; set; } //时段
public string Median { get; set; }
//节目名称
public string ProgramName { get; set; }
//节目文件路劲
public string FilePath { get; set; }
}
//频道类
public abstract class ChannelBase
{
public string channelName;//频道名称
public string path;//频道路劲
public List<TvProgram> programList;//节目列表
//解析频道节目信息
public abstract void Fetch();
}
//TypeA类频道类
public class TypeAChannel:ChannelBase
{
public TypeAChannel() { } public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
if (programList==null)
{
programList=new List<TvProgram>();
}
XmlNode root = doc.DocumentElement;
foreach (XmlNode item in root.ChildNodes)
{
if (item.Name=="tvProgramTable")
{
foreach (XmlNode child in item.ChildNodes)
{
TvProgram program = new TvProgram();
program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
program.Median = child["meridien"].InnerText;
program.ProgramName = child["programName"].InnerText;
program.FilePath = child["path"].InnerText;
this.programList.Add(program);
}
}
}
}
}
//频道B类
public class TypeBChannel:ChannelBase
{ public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(path);
if (programList == null)
{
programList = new List<TvProgram>();
}
XmlNode root = doc.DocumentElement;
//解析XMl文件并填充数据
foreach (XmlNode item in root.ChildNodes)
{
if (item.Name == "ProgramList")
{
foreach (XmlNode child in item.ChildNodes)
{
TvProgram program = new TvProgram();
program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
program.FilePath = child["path"].InnerText;
program.ProgramName = child["name"].InnerText;
this.programList.Add(program);
}
}
}
}
}
//工厂操作类
public class ChannelManager
{
public Dictionary<string, ChannelBase> dic = new Dictionary<string, ChannelBase>();//存储频道名称和该频道中的节目信息
public void LoadtvChannel()
{
XmlDocument doc = new XmlDocument();
doc.Load("files/FullChannels.xml");
XmlNode node = doc.DocumentElement;
foreach (XmlNode item in node.ChildNodes)
{
ChannelBase channel = CreateChannel(item["channelType"].InnerText);//创建频道A或者B对象
channel.channelName = item["tvChannel"].InnerText;//获取XML中频道名称
channel.path = item["path"].InnerText;//获取XML中存储的相应频道节目路劲
dic.Add(channel.channelName,channel);
}
}
//创建类的实例
public ChannelBase CreateChannel(string type)
{
ChannelBase channel = null;
switch (type)
{
case"TypeA":
channel = new TypeAChannel();
break;
case"TypeB":
channel = new TypeBChannel();
break;
default:
break;
}
return channel;
}
}
//创建ChannelManagement类对象
ChannelManager manager = new ChannelManager();
//加载TreeView中的数据
private void LoadTreeView()
{
TreeNode nodeFristLevel = new TreeNode("我的电视台");
this.tvChannel.Nodes.Add(nodeFristLevel);
TreeNode allnode = new TreeNode("所有电视台");
TreeNode node = null;
manager.LoadtvChannel();
//循环给“所有电视台”添加子节点
foreach (ChannelBase item in manager.dic.Values)
{
node = new TreeNode(item.channelName);
node.Tag = item;//保存ChannelBse对象
allnode.Nodes.Add(node);
}
this.tvChannel.Nodes.Add(allnode);
}
private void Form1_Load(object sender, EventArgs e)
{
//皮肤设置
skinEngine1.SkinFile = "MSN.ssk";
//调用方法
LoadTreeView(); }
//TreeView点击后事件
private void tvChannel_AfterSelect(object sender, TreeViewEventArgs e)
{
if (this.tvChannel.SelectedNode.Level==)//判断深度为1
{
ChannelBase channel = (ChannelBase)tvChannel.SelectedNode.Tag;
if (channel.programList != null)//清空List<T>集合中的数据
{
channel.programList.Clear();
}
channel.Fetch();
this.dgvProgList.DataSource = channel.programList;//绑定数据源
} }
小学生之解析XML应用的更多相关文章
- cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)
今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- Android之解析XML
1.XML:可扩展标记语言. 可扩展标记语言是一种很像超文本标记语言的标记语言. 它的设计宗旨是传输数据,而不是显示数据. 它的标记没有被预定义.需要自行定义标签. 它被设计为具有自我描述性. 是W3 ...
- Android之Pull解析XML
一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...
- Android之DOM解析XML
一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...
- Android之SAX解析XML
一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...
- Android 使用pull,sax解析xml
pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...
- 用 ElementTree 在 Python 中解析 XML
用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...
随机推荐
- IOS--UIActivityIndicatorView的使用方法详细
IOS--UIActivityIndicatorView的使用方法详细 // UIActivityIndicatorView的常用方法 活动指示器,就是旋转进度轮 UIActivityIndica ...
- infinite-scroll插件无限滚动加载数据的使用
网上对于infinite-scroll插件使用的例子不多.但由于它的出现,鼓吹了瀑布流形式的页面展示方式,所以不得不了解了解这种新的分页方式. 官网上有对infinite-scroll的详细描述,但一 ...
- keil C51绝对地址访问
在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...
- js中数字计算精度
其实同样的问题在java中也有存在,同样是浮点数的问题 问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一 ...
- Filter plugins ? mutate:
filter { grok { match => [ "message" , "\s*%{IPORHOST:clientip}\s+\-\s+\-\s+\[%{HT ...
- BZOJ1511: [POI2006]OKR-Periods of Words
1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 174 Solved: 92[Su ...
- BZOJ3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 339 Solved: ...
- 【Java解惑】表达式问题
1. 如果判断一个参数是否是奇数? 我们通过下面代码来尝试一下,看看方法可行不: public static boolean isOdd(int i) { return i % 2 == 1; } p ...
- Mysql 的字符编码机制、中文乱码问题及解决方案【转载】
本文转载自:http://hi.baidu.com/huabinyin/item/7f51e462df565c97c4d24929.感谢作者及相关博主. 相信很多朋友都会对字符编码敬而远 ...
- WKWebview点击图片查看大图
大家都知道,WKWebview是没有查看大图的属性或者方法的,所以只能通过js与之交互来实现这一功能,原理:通过js获取页面的图片,把它存放到数组,给图片添加点击事件,通过index显示大图就行了 其 ...