小学生之解析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 ...
随机推荐
- Instruments 使用指南
Instruments 用户指南 http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf 原著:Apple Inc ...
- [转]C# FileSystemWatcher监控指定文件或目录的文件的创建、删除、改动、重命名等活动
觉得这个很常用..比如一些软件. http://www.rabbit8.cn/DoNet/407.html FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删 ...
- 关于Java中重载的若干问题
一.问题引入 今天看视频时偶然间看到了,说父类和子类间也可以重载,貌似和以前的观念有些冲突,就验证了下…… 二.问题解决 看如下代码: public class Son extends Father ...
- yo angualr-fullstatck 项目打包部署
yoeman使用grunt进行打包部署,直接运行grunt命令即可,期间会对代码进行检查,如果存在不规范的地方jshint会指定出来. grunt会对静态资源进行打包而且对资源文件名进行了MD5作为版 ...
- SPRING-MVC访问静态文件,如jpg,js,css
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
- Keil C51中变量和函数的绝对地址定位问题
1.变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. unsigned char idata myvar _at_ 0x40; 把变量 myvar 定义在 idata 的 0 ...
- 利用Keil u4调试,精确实现软件延时
用定时器延时,有时候显得有点麻烦,我们不如考虑软件精确延时,软件延时无非就是利用for或while多重循环.以前用到延时函数时,都是从网上下载别人写好的延时子程序.延时5ms,400ms,1s,……, ...
- Aho_Corasick自动机(AC自动机)
首先,AC自动机不是Accept自动机,别以为把这段代码复制到OJ上就全都自动AC了…… 其实这玩意是Aho-Corasick 造出来的,所以你懂的. 那么这玩意能干嘛咧? •字符串的匹配问题 •多串 ...
- -_-#微信内置JavaScript API WeixinJSBridge
微信相关的 js 操作:分享.网络.菜单 微信内置JsAPI之WeixinJSBridge微信WeixinJSBridge API续
- 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...