我们经常把数据集说成临时数据库,如果我们把数据集这个临时数据库比作仓库,那么XML就是火车、轮船上的集装箱,数据集负责临时存放数据,Xml负责作为装运数据时的容器,相比数据集来讲Xml甚至还要重要一些。Xml全称eXtensibleMarkup Language,翻译为可扩展标记语言,主要用来作为系统与系统之间传递数据时的载体。
重点:
Ø Xml的语法
Ø Xml的组成
Ø 如何实现多种数据与Xml的转换
预习功课:
Ø Xml的简介与由来
Ø Xml的组成
Ø Xml的语法
Ø Xml与数据表的转化
7.1 Xml简介
XML代表Extensible Markup Language(eXtensible MarkupLanguage的缩写,意为可扩展的标记语言)。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
7.1.1 XML和HTML的主要区别是什么
XML是用来存放数据的
XML不是HTML的替代品,XML和HTML是两种不同用途的语言。
XML是被设计用来描述数据的,重点是:什么是数据,如何存放数据。 HTML是被设计用来显示数据的,重点是:显示数据以及如何显示数据更好上面。
HTML是与显示信息相关的, XML则是与描述信息相关的。
7.1.2 Xml的用途
ü Xml可以从Html中分离数据
ü Xml用于交换数据和共享数据
ü Xml可以用于存储数据
笑话:在简历上写会Xml.
7.2 Xml的语法
对于一个Xml的初学者来讲,首先你要了解Xml的语法。了解了Xml的语法以后你就可以自己定义Xml标签了,有了自己定义的标签就可以创建Xml文档来存储数据了。
7.2.1 Xml文档的组成部分
ü 用于以分层顺序表达数据的XML文档的各种组件为:
n 处理指令(PI)
n 标识符
n 元素
n 内容
n 属性
n 实体
n 注释
如下案例:
<仓库数据> <存货 编号=“S101”> <产品名>Toys <数量>100 <显示信息>玩具价格 < 200
Toys 100等都是xml的内容
内容指的是XML文档的元素所表示的信息。一个元素可以包含:
• 字符或数据内容
• 元素内容
• 组合或混合内容
对于Xml文档来讲,每一条标签我们都可以认为是Xml文档的一个组成元素,是Xml文档组成的基本单元,基本格式为:
<标签名 属性="属性值"> 元素值
Xml中标签的命名必须遵守的规则:
l 元素的名字可以包含字母、数字和其他字符
l 元素的名字不能以数字或者标点符号开头
l 元素的名字不能以Xml(或xml、XML、xMl…)开头
l 元素的名字不能包含空格
7.2.2 Xml语法注意事项
l Xml文档中声明语句要放在第一句:
如:
l XML标签定义是区分大小写的,如下为错误格式
雾都孤儿
l 每一个标签要有结束标签,但是如果标签没有内容可以将两个标签合二为一。如:等效于
l 属性值要加上引号,这一点和Html不同,如:
J2EE课程
l 一个Xml文档只有一个根节点,除了根节点之外其他的节点都可以重复。
l 在书写XML时应注意代码行的缩进,Xml文档实际上描述的是一种树形结构。
项目:
将下面主、从表的转换为一个Xml文件
7.3.1 RSS格式 Really Simple Syndication
新浪新闻 新浪新闻频道 http://rss.sina.com.cn/news/marquee/ddt.xml ... 欧文里程碑进球直追三大传奇 http://sports.sina.com.cn… 06383166011.shtml 欧锦赛预选赛 ...
Xml详细的描述如下:
周杰杰 22 耍双节棍棍
利用C#程序从xml文件读取数据的源代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.Xml; namespace ReadXml { class Program { static void Main(string[]args) { XmlDocument myXml = newXmlDocument(); myXml.Load("Student.xml"); //读取指定的XML文档 XmlNode student =myXml.DocumentElement;//读取XML的根节点 foreach (XmlNode node instudent.ChildNodes)// 对子节点进行循环 { //将每个节点的内容显示出来 switch (node.Name) { case "Name": Console.WriteLine("姓名:{0}",node.InnerText); break; case"Age": Console.WriteLine("年龄:{0}", node.InnerText); break; case"Hobby": Console.WriteLine("爱好:{0}", node.InnerText); break; } } } } }
• XmlDocument对象表示XML整个文档
• XmlNode对象表示XML文件的单个节点
•
7.3.3 抓取文章列表步骤
遍历Xml使用如下步骤:
• 在RssFeed类中添加FetchArticles()
• 使用二重循环
代码详见MyNewsReader解决方案
将Xml文件读进TreeView控件
TreeView的节点和XML的节点类似
foreach(设置循环频道节点) { //TreeView.Nodes 和XmlDocument.ChildeNodes比较 foreach(设置循环文章节点) { // TreeNode.Nodes和 XmlNode.ChildeNodes //设置Article的值 } }
TreeView也是用节点表示数据
pm.Load();//取得频道信息
foreach (RssFeed feed inpm.Profile.Feeds)//按频道循环 { TreeNode feedNode; feedNode =tvMain.Nodes.Add(feed.DisplayName); foreach (Article atcl infeed.Articles.Values) {//按文章列表循环 feedNode.Nodes.Add(atcl.Title); } }
右键更新选中的频道新闻
TreeNode node =tvMain.SelectedNode; … if(pm.Profile.Feeds[node.Index].FetchArticles()) { //调用更新指定频道得方法 UpdateArticlesView(node.Index); } tvMain.BeginUpdate(); //禁止树视图重绘 tvMain.Nodes[feedIndex].Nodes.Clear(); foreach (Article atcl inpm.Profile.Feeds[feedIndex].Articles.Values) { TreeNode node; node =tvMain.Nodes[feedIndex].Nodes.Add(atcl.Title); } //启用树视图重绘 tvMain.EndUpdate(); 选中文章节点,将内容显示在WebBrowser if (tvMain.SelectedNode.Level== 0) return; int feedIndex =tvMain.SelectedNode.Parent.Index; string articleKey =tvMain.SelectedNode.Text; wbMain.Navigate (pm.Profile.Feeds[feedIndex].Articles[articleKey].Url);