C#三十 Ado.net和XML

简介: C#三十 Ado.net和XML

  我们经常把数据集说成临时数据库,如果我们把数据集这个临时数据库比作仓库,那么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       注释

如下案例:

<?xmlversion=“1.0” encoding=“GBK”?> <!--处理指令(PI)
提供关于应怎样处理XML文件的信息.-->
<仓库数据><!—根元素-->
<!--仓库数据是根元素-->  <!--子元素 -->
<存货 编号=“S101”>   <!—编号为属性-->
<产品名>Toys</产品名> 
     <数量>100</数量>
     <显示信息>玩具价格 &lt; 200 </显示信息>
</存货>
</仓库数据>

Toys 100等都是xml的内容


内容指的是XML文档的元素所表示的信息。一个元素可以包含:


•         字符或数据内容


•         元素内容


•         组合或混合内容


       对于Xml文档来讲,每一条标签我们都可以认为是Xml文档的一个组成元素,是Xml文档组成的基本单元,基本格式为:


<标签名 属性="属性值"> 元素值 </标签名>


    Xml中标签的命名必须遵守的规则:


l       元素的名字可以包含字母、数字和其他字符


l       元素的名字不能以数字或者标点符号开头


l       元素的名字不能以Xml(或xml、XML、xMl…)开头


l       元素的名字不能包含空格


7.2.2 Xml语法注意事项


l       Xml文档中声明语句要放在第一句:


如:<?xmlversion="1.0" encoding="GB2312"?>


l       XML标签定义是区分大小写的,如下为错误格式


<BookName>雾都孤儿</bookName>


l       每一个标签要有结束标签,但是如果标签没有内容可以将两个标签合二为一。如:<User id="科比"/>等效于<User id="科比"></User>


l       属性值要加上引号,这一点和Html不同,如:


<font color="red">J2EE课程</font>


l       一个Xml文档只有一个根节点,除了根节点之外其他的节点都可以重复。


l       在书写XML时应注意代码行的缩进,Xml文档实际上描述的是一种树形结构。


项目:


将下面主、从表的转换为一个Xml文件

7.3.1 RSS格式 Really Simple Syndication

<rss version="2.0">
       <channel>
    <title>新浪新闻</title>
    <description>新浪新闻频道</description>
    <link>http://rss.sina.com.cn/news/marquee/ddt.xml</link>
    ...
    <item>
           <title>欧文里程碑进球直追三大传奇 </title>
           <link>http://sports.sina.com.cn…                      
                               06383166011.shtml</link>
           <description>欧锦赛预选赛</description>
               </item>
            ...
      </channel>
</rss>

Xml详细的描述如下:

 <rss version="2.0">
       <channel> <!--频道节点 -- >
    <title></title><!--频道标题节点-- >
    <description></description><!--频道描述-- >
    <link></link> <!--频道链接URL -- >
    ...
    <item> <!--文章项目节点-- >
           <title></title> <!--文章标题-- >
           <link></link> <!--文章链接URL-- >
           <description></description><!--文章描述-- >
               </item>
            ...
      </channel>
</rss>

7.3.2 从Xml文件读取数据

Student.xml文件如下:

<?xml version="1.0" encoding="utf-8" ?>
<Student>
    <Name>张靓靓</Name>
    <Age>20</Age>
    <Hobby>唱歌歌</Hobby>
    <!-- -->
    <Name>周杰杰</Name>
    <Age>22</Age>
    <Hobby>耍双节棍棍</Hobby>
</Student>1. <?

利用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);
目录
相关文章
|
2月前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
8天前
|
开发框架 搜索推荐 算法
一个包含了 50+ C#/.NET编程技巧实战练习教程
一个包含了 50+ C#/.NET编程技巧实战练习教程
58 18
|
8天前
|
缓存 算法 安全
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
精选10款C#/.NET开发必备类库(含使用教程),工作效率提升利器!
41 12
|
6天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
C#/.NET/.NET Core拾遗补漏合集(24年12月更新)
|
6天前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
6天前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
21天前
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
38 5
|
29天前
|
算法 Java 测试技术
Benchmark.NET:让 C# 测试程序性能变得既酷又简单
Benchmark.NET是一款专为 .NET 平台设计的性能基准测试框架,它可以帮助你测量代码的执行时间、内存使用情况等性能指标。它就像是你代码的 "健身教练",帮助你找到瓶颈,优化性能,让你的应用跑得更快、更稳!希望这个小教程能让你在追求高性能的路上越走越远,享受编程带来的无限乐趣!
86 13
|
2月前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
54 7
|
2月前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)

相关课程

更多