小学生之解析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 ...
随机推荐
- windows10 预览版 中英文官方下载地址+激活密钥+网盘分享
windows10 预览版 中英文官方下载地址+激活密钥+网盘分享 产品密钥:NKJFK-GPHP7-G8C3J-P6JXR-HQRJR 英语 64 位 (x64) http://iso.esd.m ...
- redgate
http://www.cnblogs.com/VAllen/archive/2012/09/08/SQLPrompt.html http://www.cnblogs.com/dotLive/archi ...
- Android 介绍spydroid每个包的大体功能
看了接近一周的spydroid源代码,对spydroid这个开源项目有了一定的认识.也许有些理解不一定正确,给后来者一点启示.也是自己对rtsp协议,rtp协议的总结. 在windows下,如果安装了 ...
- rabbitMQ入门
1 安装 1.1 首先 arbbitmq是用爱尔兰这种语言去编写的,所以,需要这种语言支持,那就需要下载以下几个包去安装来搭建环境 下载并安装erlang,http://www.erlang.org/ ...
- 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...
- stdout 与 stderr 的区别
stdout 与 stderr 的区别 一直没有注意 stdout 与 stderr 的区别,以为只是不同的描述方式.看来不是这样的. stdout 主要处理的是使用者输出 stderr 主要处理的错 ...
- POJ3080 Blue Jeans
题目链接. 题目大意: 给定n个字符串,找出最长相同且长度大于3的子串,如果存在多个,找出字典序最小的. 分析: 直接枚举(暴搜). 对于s[0]的每一个子串,判断是否在其它n-1个字符串中都存在. ...
- -_-#【AJAX】XMLHttpRequest
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- windows程序设计简介
大家好,非常高兴和大家一起分享Windows开发心得,Windows已经诞生很多年了,一直因为它的简单易用而深受欢迎,相信很多人在使用Windows的时候,一定有这样一个想法:希望自己将来可以写一个很 ...
- Delphi TNativeXML Node节点乱码的一种解决方法
Node1.WriteString(HomologousFieldItem.cXMLNodeCode, AnsiToUtf8(FieldByName(HomologousFieldItem.cMapp ...