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);
目录
相关文章
|
22天前
|
算法 C# 数据库
【干货】一份10万字免费的C#/.NET/.NET Core面试宝典
C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺、扩充知识面和大家共同学习进步。该知识库主要由自己平时学习实践总结、网上优秀文章资料收集(这一部分会标注来源)和社区小伙伴提供三部分组成。该份基础面试宝典完全免费,发布两年来收获了广大.NET小伙伴的好评,我会持续更新和改进,欢迎关注我的公众号【追逐时光者】第一时间获取最新更新的面试题内容。
|
22天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
2月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
12 0
|
2月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
68 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
2月前
|
开发框架 算法 搜索推荐
C# .NET面试系列九:常见的算法
#### 1. 求质数 ```c# // 判断一个数是否为质数的方法 public static bool IsPrime(int number) { if (number < 2) { return false; } for (int i = 2; i <= Math.Sqrt(number); i++) { if (number % i == 0) { return false; } } return true; } class Progr
60 1
|
12天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
18 1
|
16天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
22天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。
|
2月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
132 1
C# .NET面试系列十:数据库概念知识
|
2月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
177 2