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应用的更多相关文章

  1. cocos2d-x 3.0 使用Sax解析xml文件(中国显示器问题解决)

    今天是个好日子.我以为事情可以变得,明天是个好日子.打开门儿春风... 恩,听着歌写文档生活就是这么享受. 今天曾经的邻居大神突然在qq上赞了我一下,这让我异常激动啊.. 这还要从前前前几天说起,那会 ...

  2. Android 解析XML文件和生成XML文件

    解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...

  3. Android之解析XML

    1.XML:可扩展标记语言. 可扩展标记语言是一种很像超文本标记语言的标记语言. 它的设计宗旨是传输数据,而不是显示数据. 它的标记没有被预定义.需要自行定义标签. 它被设计为具有自我描述性. 是W3 ...

  4. Android之Pull解析XML

    一.Pull解析方法介绍 除了可以使用SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件.Pull解析器的运行方式与SAX解析器相似.它也是事件触发的.Pull解 ...

  5. Android之DOM解析XML

    一.DOM解析方法介绍 DOM是基于树形结构的节点或信息片段的集合,允许开发人员使用DOM API遍历XML树,检索所需数据.分析该结构通常需要加载整个文档和构造树形结构,然后才可以检索和更新节点信息 ...

  6. Android之SAX解析XML

    一.SAX解析方法介绍 SAX(Simple API for XML)是一个解析速度快并且占用内存少的XML解析器,非常适合用于Android等移动设备. SAX解析器是一种基于事件的解析器,事件驱动 ...

  7. Android 使用pull,sax解析xml

    pull解析xml文件 1.获得XmlpullParser类的引用 这里有两种方法 //解析器工厂 XmlPullParserFactory factory=XmlPullParserFactory. ...

  8. 用 ElementTree 在 Python 中解析 XML

    用 ElementTree 在 Python 中解析 XML 原文: http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python- ...

  9. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax; import org.xml.sax.Attributes; import org.xml.sax.SAXE ...

随机推荐

  1. Instruments 使用指南

    Instruments 用户指南 http://cdn.cocimg.com/bbs/attachment/Fid_6/6_24457_90eabb4ed5b3863.pdf 原著:Apple Inc ...

  2. [转]C# FileSystemWatcher监控指定文件或目录的文件的创建、删除、改动、重命名等活动

    觉得这个很常用..比如一些软件.   http://www.rabbit8.cn/DoNet/407.html   FileSystemWatcher控件主要功能: 监控指定文件或目录的文件的创建.删 ...

  3. 关于Java中重载的若干问题

    一.问题引入 今天看视频时偶然间看到了,说父类和子类间也可以重载,貌似和以前的观念有些冲突,就验证了下…… 二.问题解决 看如下代码: public class Son extends Father ...

  4. yo angualr-fullstatck 项目打包部署

    yoeman使用grunt进行打包部署,直接运行grunt命令即可,期间会对代码进行检查,如果存在不规范的地方jshint会指定出来. grunt会对静态资源进行打包而且对资源文件名进行了MD5作为版 ...

  5. SPRING-MVC访问静态文件,如jpg,js,css

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

  6. Keil C51中变量和函数的绝对地址定位问题

    1.变量绝对地址定位 1) 在定义变量时使用 _at_ 关键字加上地址就可. unsigned char idata myvar _at_ 0x40;  把变量 myvar 定义在 idata 的 0 ...

  7. 利用Keil u4调试,精确实现软件延时

    用定时器延时,有时候显得有点麻烦,我们不如考虑软件精确延时,软件延时无非就是利用for或while多重循环.以前用到延时函数时,都是从网上下载别人写好的延时子程序.延时5ms,400ms,1s,……, ...

  8. Aho_Corasick自动机(AC自动机)

    首先,AC自动机不是Accept自动机,别以为把这段代码复制到OJ上就全都自动AC了…… 其实这玩意是Aho-Corasick 造出来的,所以你懂的. 那么这玩意能干嘛咧? •字符串的匹配问题 •多串 ...

  9. -_-#微信内置JavaScript API WeixinJSBridge

    微信相关的 js 操作:分享.网络.菜单 微信内置JsAPI之WeixinJSBridge微信WeixinJSBridge API续

  10. 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错

    原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...