C#三十 Ado.net和XML

举报
tea_year 发表于 2021/12/30 00:15:01 2021/12/30
【摘要】 我们经常把数据集说成临时数据库,如果我们把数据集这个临时数据库比作仓库,那么XML就是火车、轮船上的集装箱,数据集负责临时存放数据,Xml负责作为装运数据时的容器,相比数据集来讲Xml甚至还要重要一些。Xml全称eXtensibleMarkup Language,翻译为可扩展标记语言,主要用来作为系统与系统之间传递数据时的载体。 &nb...

我们经常把数据集说成临时数据库,如果我们把数据集这个临时数据库比作仓库,那么XML就是火车、轮船上的集装箱,数据集负责临时存放数据,Xml负责作为装运数据时的容器,相比数据集来讲Xml甚至还要重要一些。Xml全称eXtensibleMarkup Language,翻译为可扩展标记语言,主要用来作为系统与系统之间传递数据时的载体。

 视频课堂https://edu.csdn.net/course/play/7621

重点:

Ø      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>

 

利用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);


文章来源: aaaedu.blog.csdn.net,作者:tea_year,版权归原作者所有,如需转载,请联系作者。

原文链接:aaaedu.blog.csdn.net/article/details/51356447

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。