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. IOS--UIActivityIndicatorView的使用方法详细

    IOS--UIActivityIndicatorView的使用方法详细   // UIActivityIndicatorView的常用方法 活动指示器,就是旋转进度轮 UIActivityIndica ...

  2. infinite-scroll插件无限滚动加载数据的使用

    网上对于infinite-scroll插件使用的例子不多.但由于它的出现,鼓吹了瀑布流形式的页面展示方式,所以不得不了解了解这种新的分页方式. 官网上有对infinite-scroll的详细描述,但一 ...

  3. keil C51绝对地址访问

    在利用keil进行8051单片机编程的时,常常需要进行绝对地址进行访问.特别是对硬件操作,如DA AD 采样 ,LCD 液晶操作,打印操作.等等.C51提供了三种访问绝对地址的方法: 1. 绝对宏 在 ...

  4. js中数字计算精度

    其实同样的问题在java中也有存在,同样是浮点数的问题 问题这样的: 37.5*5.5=206.08 (JS算出来是这样的一个结果,我四舍五入取两位小数) 我先怀疑是四舍五入的问题,就直接用JS算了一 ...

  5. Filter plugins ? mutate:

    filter { grok { match => [ "message" , "\s*%{IPORHOST:clientip}\s+\-\s+\-\s+\[%{HT ...

  6. BZOJ1511: [POI2006]OKR-Periods of Words

    1511: [POI2006]OKR-Periods of Words Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 174  Solved: 92[Su ...

  7. BZOJ3709: [PA2014]Bohater

    3709: [PA2014]Bohater Time Limit: 5 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 339  Solved: ...

  8. 【Java解惑】表达式问题

    1. 如果判断一个参数是否是奇数? 我们通过下面代码来尝试一下,看看方法可行不: public static boolean isOdd(int i) { return i % 2 == 1; } p ...

  9. Mysql 的字符编码机制、中文乱码问题及解决方案【转载】

    本文转载自:http://hi.baidu.com/huabinyin/item/7f51e462df565c97c4d24929.感谢作者及相关博主.        相信很多朋友都会对字符编码敬而远 ...

  10. WKWebview点击图片查看大图

    大家都知道,WKWebview是没有查看大图的属性或者方法的,所以只能通过js与之交互来实现这一功能,原理:通过js获取页面的图片,把它存放到数组,给图片添加点击事件,通过index显示大图就行了 其 ...