namespace _08_电视精灵
{
public class ChannelFactory
{
public static ChannelBase CreateChannel(string type)
{
ChannelBase channel = null;
switch (type)
{
case "TypeA":
channel=new TypeA();
break;
case "TypeB":
channel = new TypeB();
break;
}
return channel;
}
}
}
namespace _08_电视精灵
{
public partial class FrmTV : Form
{
public FrmTV()
{
InitializeComponent();
}
public ChannelManager manager = new ChannelManager();
private void FrmTV_Load(object sender, EventArgs e)
{
TreeNode nodeFirstLevel = new TreeNode("我的电视台");
TreeNode root = new TreeNode( "所有电视台");
//访问 ChannelManager 中的 FullChannels 集合
manager.ReadXmlToList();
List<ChannelBase> list = manager.FullChannels1;
int num = 0;
foreach (ChannelBase item in list)
{
TreeNode node = new TreeNode();
node.Text = item.ChannelName;
node.Tag = num;
nodeFirstLevel.Nodes.Add(node);
root.Nodes.Add(node);
num++;
}
this.tvShow.Nodes.Add(nodeFirstLevel);
this.tvShow.Nodes.Add(root);
}
private void tvShow_AfterSelect(object sender, TreeViewEventArgs e)
{
List<ChannelBase> list = manager.FullChannels1;
ChannelBase ba = list[Convert.ToInt16(tvShow.SelectedNode.Tag)];
ba.Fetch();
dataGridView1.DataSource = ba.tvList;
}
}
}
namespace _08_电视精灵
{
//相当于一个 工具类 管理所有频道
public class ChannelManager
{
// 01. 定义一个泛型
private List<ChannelBase> FullChannels = new List<ChannelBase>();
public List<ChannelBase> FullChannels1
{
get { return FullChannels; }
set { FullChannels = value; }
}
public ChannelManager()
{
FullChannels = new List<ChannelBase>();
}
// 01. 定义一个方法 将XML数据填充到泛型中
public void ReadXmlToList()
{
XmlDocument doc = new XmlDocument();
doc.Load("FullChannels.xml");
XmlNode root = doc.DocumentElement;
foreach (XmlNode item in root.ChildNodes)
{
//解析出当前的频道类型
string type = item["channelType"].InnerText;
ChannelBase channel = ChannelFactory.CreateChannel(type);
// 每一个item 是一个频道对象
channel.ChannelName = item["tvChannel"].InnerText;
channel.ChannelPath = item["path"].InnerText;
FullChannels.Add(channel);
}
}
}
}
namespace _08_电视精灵
{
//频道父类
//三个属性 一个方法
public abstract class ChannelBase
{
public string Type { get; set; }
public string ChannelName { get; set; }
public string ChannelPath { get; set; }
//提供一个用于保存该频道下的所有节目单集合
public List<TVProgram> tvList = new List<TVProgram>();
//Fetch ()方法 解析Path 对应的频道 xml 文件,形成内存中的泛型集合
public abstract void Fetch();
}
}
namespace _08_电视精灵
{
//和files/xml文件对应
//这些类 是根据 XML 文件的属性提炼出来的
public class TVProgram
{
//播出时间
public DateTime PlayTime { get; set; }
//早间档 午间档 晚间档
public string ShiDuan { get; set; }
//节目名称
public string Name { get; set; }
//视频路径
public string Path { get; set; }
}
}
namespace _08_电视精灵
{
//北京电视台.Xml
public class TypeA:ChannelBase
{
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load("北京电视台.xml");
XmlNode root = doc.DocumentElement;
//<playTime>2013-9-29 06:02</playTime> <!--节目播出时间-->
//<meridien>早间档</meridien> <!--时段-->
//<programName>重播:国际双行线</programName> <!--节目名称-->
//<path>c:\a.wma</path>
每一个 item 是一个频道
foreach (XmlNode item in root.ChildNodes)
{
if (item.Name.Equals("tvProgramTable"))
{
foreach (XmlNode item2 in item.ChildNodes)
{
TVProgram tp = new TVProgram();
tp.PlayTime = Convert.ToDateTime(item2["playTime"].InnerText);
tp.ShiDuan = item2["meridien"].InnerText;
tp.Path = item2["path"].InnerText;
tp.Name = item2["programName"].InnerText;
//把解析出来的 放到 集合里
tvList.Add(tp);
}
}
}
}
}
}
namespace _08_电视精灵
{
//凤凰电视台.Xml
public class TypeB:ChannelBase
{
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load("凤凰卫视.xml");
XmlNode root = doc.DocumentElement;
//每一个 item 是一个频道
foreach (XmlNode item in root.ChildNodes)
{
if (item.Name.Equals("ProgramList "))
{
foreach (XmlNode item2 in item.ChildNodes)
{
TVProgram tp = new TVProgram();
tp.PlayTime = Convert.ToDateTime(item2["PlayTime"].InnerText);
tp.ShiDuan = item2["ShiDuan"].InnerText;
tp.Path = item2["path"].InnerText;
tp.Name = item2["name"].InnerText;
//把解析出来的 放到 集合里
tvList.Add(tp);
}
}
}
}
}
}