• 无处不在的XML


    无处不在的XML

    在学习XML之前我们先想一下,在之前我们见过这个东西么?

    主要作用是做数据的存储,而HTML是做数据的展现.

    当我们用数据库存储的时候的优点是,安全度高,查询方便.缺点就是数据量小的时候,用数据库有点杀鸡用牛刀的感觉.而且数据库这种存储方式必须依赖某个软件才能查看.

    用文本文件的优点是,快速,方便.缺点就是:不安全.设计格式不太方便.

    XML是个文本文件,任何操作系统都能识别,能把我们要的数据结构化的存储起来.

    Office2007的文件格式docx、xlsx、pptx都是xml,先改成rar文件然后解压。

    XML和HTML的区别:

    1. XML有且只能有一个根元素
    2. XML严格区分大小写—如果是大写就全是大写,如果是小写就全是小写
    3. XML中的属性都必须用引号引起来(推荐:双引号)
    4. 元素有开始,必须有结束.

                           

    一、XML和HTML的区别演示代码

    HTML有一些预定义的标签,而XML则没有。HTML标签不能扩展,XML可以扩展。除了头上面这个是预定义好的:<?xml version=”1.0” encoding=”gb2312”?>

      在XML里面有一个规范xsd,在这里我们不学怎么写规范,只是学习一下怎么去用XML就可以了。

     

    二、应用程序配置文件

    这个配置文件就是个XML文件,经常用的就是数据库连接。

     

    三、XML文档规范

    XML当中的嵌套问题:

     

    四、XML当中的嵌套

    用记事本就可以编写XML文件,通过程序来写怎么来写呢?

    1.Dom[XmlDocument、XDocument](文档对象模型,将整个xml加载到内存中,然后操作)、

    2.Sax(事件驱动,.net中使用XmlReader(XmlTextReader)、XmlWriter(XmlTextWriter)来替代)等,还有高级的读写技术

    3.XmlSerializer(xml序列化,需要先定义类)、

    4.Linq To XML(System.Xml.Linq)等, XmlSerializer要求对每种不同的文件都定义一套类,很麻烦,而Linq To XML则不需要单独创建类,当然更底层一些,代码比XmlSerializer多,灵活性更高。System.Xml下的类是2.0及之前操作xml推荐的,现在很多人也仍然在用这个namespace下的类,这个namespace下的类和Linq To XML非常相似,因此不用单独学。

    下面我们手动写一个XML.我就用记事本写了.

    存储单位的所有的员工:

     

    五、新建xml文件

    插入手写的XML文件,存储员工信息。

    View Code
     1 <?xml version="1.0" encoding="gb2312"?>
     2 <guoxing>
     3 <technicalsection  count="50" room="1403">
     4 <employee TNo="gx001">
     5 <name>陈涛</name>
     6 <age>18</age>
     7 <gender></gender>
     8 </employee>
     9 <employee TNo="gx001">
    10 <name>陈涛2</name>
    11 <age>18</age>
    12 <gender></gender>
    13 </employee>
    14 <employee TNo="gx001">
    15 <name>陈涛3</name>
    16 <age>18</age>
    17 <gender></gender>
    18 </employee>
    19 <employee TNo="gx001">
    20 <name>陈涛4</name>
    21 <age>18</age>
    22 <gender></gender>
    23 </employee>
    24 <employee TNo="gx001">
    25 <name>陈涛5</name>
    26 <age>18</age>
    27 <gender></gender>
    28 </employee>
    29 </technicalsection>
    30 
    31 <salesdepartment count="50" room="1506">
    32 
    33 </salesdepartment>
    34 </guoxing>

    可以用浏览器进行预览。

     

    六、在浏览器中进行预览的效果

    接下来我们就介绍通过程序来写一个XML文件。和通过程序来读XML文件。

    下把我们刚自己手动写好的XML文件拷入程序,然后,读取下。

     

    七、添加XML文件

     

    八、递归输出每个节点

    在还有子元素的情况下,我们这里已经没办法再遍历出来了。所以在这里我们就考虑递归了。

    九、递归显示每个子元素代码

    接下来我们在读取其中的属性

     

    十、输出属性的代码

    现在我只想输出count属性,怎么办呢?

    item.Attribute(“count”);//根据属性名来获取指定的属性的值。

    在name标签里面还有值,怎么才能打印出来里面的值呢?当没有子元素的时候就把值打印出来。

    判断一下当前标签是否有子元素。

     

    十一、把没有子元素的值也打印出来

    上面我们是把XML显示在控制台上了,要是加载到treeview就比较的清晰了。(作业)

    XML当中的其它一些个基本概念。

    在XML当中可以写个注释

    注释不能算是XML的元素,但是这些都是XML的节点。所以注释打印不出来。

    xdoc.Elements()//只返回元素

    xdoc.Nodes()返回所有节点(包括注释等。)

    xeRoot.Elements(“net”)搜索直接子元素

    xeRoot.Descendants(“net”);搜索所有后代元素。

    将XML文件递归加载到treeview上。

     

    十二、画好界面,加载好文件

     

    十三、递归到树

    网页RSS订阅

    打开网站看新闻的时候,会有很多的广告。在网站上找到RSS。

     

    十四、点击:XML订阅

    对于各大网站,如果我们只看新闻的标题,不看内容的话,对于我们看新闻来讲会更加的直接。

    打开foxmail

     

    十五、RSS订阅

    formail是怎么得到网页当天的新闻的呢?是连上网页的数据库了么?这是不可能的。我们把刚才的网页xml文件下载-另存为一下。

     

    十六、下载xml文件

     

    十七、用高级记事本打开看下里面的内容

    想让它正常格式显示的话,复制-粘贴到xml文件

     

    十八、新建xml文件

    在我们的编辑工具里面,ctrl+K+D,自动格式化了。去掉外部样式表,就跟我们自己写的xml一回事儿了。

     

    十九、普通的xml文件

    xml文件当中只有一个根节点,包含了什么内容呢?包含channel这个节点。formail通过title识别哪个频道,我们的formail之所以能看到新闻,就是它读取并且解析了这个xml文件。

    把这个xml文件放到我们写的项目下,

     

    二十、也能实现加载内容

    xml案例

    读取order.xml文件,一行一行的输出。

     

    二十一、将xml文件拷贝过来

     

    二十二、需要我们读取并且输出的xml文件

     

    二十三、读取订单xml文件内容并输出的代码

    我们在看下面一个案例:

     

    二十四、银行交易数据读写

    案例中需要用到的XML文件插入位置:

    View Code
      1 <?xml version="1.0" encoding="utf-8" ?> 
      2 <CFX>
      3         <MSG>
      4             <交易码  val="1000"/>
      5             <流水号  val="100000000000000001"/>
      6             <金额  val="1234567890.12"/>
      7             <付款机构  val="腾讯销售部"/>
      8             <付款单位账号  val="12345678901234567890"/>
      9             <收款机构  val="新浪财务部"/>
     10             <收款单位账号  val="12345678901234567890"/>
     11         </MSG>
     12         <MSG>
     13             <交易码  val="1000"/>
     14             <流水号  val="100000000000000002"/>
     15             <金额  val="1234567890.12"/>
     16             <付款机构  val="1234"/>
     17             <付款单位账号  val="12345678901234567890"/>
     18             <收款机构  val="1234"/>
     19             <收款单位账号  val="12345678901234567890"/>
     20         </MSG>
     21         <MSG>
     22             <交易码  val="1000"/>
     23             <流水号  val="100000000000000003"/>
     24             <金额  val="1234567890.12"/>
     25             <付款机构  val="1234"/>
     26             <付款单位账号  val="12345678901234567890"/>
     27             <收款机构  val="1234"/>
     28             <收款单位账号  val="12345678901234567890"/>
     29         </MSG>
     30         <MSG>
     31             <交易码  val="1000"/>
     32             <流水号  val="100000000000000004"/>
     33             <金额  val="1234567890.12"/>
     34             <付款机构  val="1234"/>
     35             <付款单位账号  val="12345678901234567890"/>
     36             <收款机构  val="1234"/>
     37             <收款单位账号  val="12345678901234567890"/>
     38         </MSG>
     39         <MSG>
     40             <交易码  val="1000"/>
     41             <流水号  val="100000000000000005"/>
     42             <金额  val="1234567890.12"/>
     43             <付款机构  val="1234"/>
     44             <付款单位账号  val="12345678901234567890"/>
     45             <收款机构  val="1234"/>
     46             <收款单位账号  val="12345678901234567890"/>
     47         </MSG>
     48         <MSG>
     49             <交易码  val="1000"/>
     50             <流水号  val="100000000000000006"/>
     51             <金额  val="1234567890.12"/>
     52             <付款机构  val="1234"/>
     53             <付款单位账号  val="12345678901234567890"/>
     54             <收款机构  val="1234"/>
     55             <收款单位账号  val="12345678901234567890"/>
     56         </MSG>
     57         <MSG>
     58             <交易码  val="1000"/>
     59             <流水号  val="100000000000000007"/>
     60             <金额  val="1234567890.12"/>
     61             <付款机构  val="1234"/>
     62             <付款单位账号  val="12345678901234567890"/>
     63             <收款机构  val="1234"/>
     64             <收款单位账号  val="12345678901234567890"/>
     65         </MSG>
     66         <MSG>
     67             <交易码  val="1000"/>
     68             <流水号  val="100000000000000008"/>
     69             <金额  val="1234567890.12"/>
     70             <付款机构  val="1234"/>
     71             <付款单位账号  val="12345678901234567890"/>
     72             <收款机构  val="1234"/>
     73             <收款单位账号  val="12345678901234567890"/>
     74         </MSG>
     75         <MSG>
     76             <交易码  val="1000"/>
     77             <流水号  val="100000000000000009"/>
     78             <金额  val="1234567890.12"/>
     79             <付款机构  val="1234"/>
     80             <付款单位账号  val="12345678901234567890"/>
     81             <收款机构  val="1234"/>
     82             <收款单位账号  val="12345678901234567890"/>
     83         </MSG>
     84         <MSG>
     85             <交易码  val="1000"/>
     86             <流水号  val="100000000000000010"/>
     87             <金额  val="1234567890.12"/>
     88             <付款机构  val="1234"/>
     89             <付款单位账号  val="12345678901234567890"/>
     90             <收款机构  val="1234"/>
     91             <收款单位账号  val="12345678901234567890"/>
     92         </MSG>
     93         <MSG>
     94             <交易码  val="1000"/>
     95             <流水号  val="100000000000000011"/>
     96             <金额  val="1234567890.12"/>
     97             <付款机构  val="1234"/>
     98             <付款单位账号  val="12345678901234567890"/>
     99             <收款机构  val="1234"/>
    100             <收款单位账号  val="12345678901234567890"/>
    101         </MSG>
    102         <MSG>
    103             <交易码  val="1000"/>
    104             <流水号  val="100000000000000012"/>
    105             <金额  val="1234567890.12"/>
    106             <付款机构  val="1234"/>
    107             <付款单位账号  val="12345678901234567890"/>
    108             <收款机构  val="1234"/>
    109             <收款单位账号  val="12345678901234567890"/>
    110         </MSG>
    111         <MSG>
    112             <交易码  val="1000"/>
    113             <流水号  val="100000000000000013"/>
    114             <金额  val="1234567890.12"/>
    115             <付款机构  val="1234"/>
    116             <付款单位账号  val="12345678901234567890"/>
    117             <收款机构  val="1234"/>
    118             <收款单位账号  val="12345678901234567890"/>
    119         </MSG>
    120         <MSG>
    121             <交易码  val="1000"/>
    122             <流水号  val="100000000000000014"/>
    123             <金额  val="1234567890.12"/>
    124             <付款机构  val="1234"/>
    125             <付款单位账号  val="12345678901234567890"/>
    126             <收款机构  val="1234"/>
    127             <收款单位账号  val="12345678901234567890"/>
    128         </MSG>
    129         <MSG>
    130             <交易码  val="1000"/>
    131             <流水号  val="100000000000000015"/>
    132             <金额  val="1234567890.12"/>
    133             <付款机构  val="1234"/>
    134             <付款单位账号  val="12345678901234567890"/>
    135             <收款机构  val="1234"/>
    136             <收款单位账号  val="12345678901234567890"/>
    137         </MSG>
    138 </CFX>

    在做之前我们先分析一下这个XML文件,有一个根节点CFX,有多条MSG。每个MSG里面包括交易码,流水号,金额。

     

    二十五、还是先把XML文件拷贝过来

     

    二十六、读取交易记录的xml的代码

     现在我们观察这么一段XML文件。

                           

    二十七、需要观察的xml代码

    文件中有四位同学,现在请获取一年级同学的信息。

    现在我们有种相对简单的办法。

     

    二十八、引入xml文件

     

    二十九、XmlDocument所在的命名空间

     

    三十、xpath应用演示

    大家在MSDN里面输入xpath就能找到xpath每个表达式每个意思。

    下面是我搜集的xpath表达式的连接,大家可以点击查看。

    XPath 表达式

    下面我们先说一个问题,就是XML的序列化问题:

     

    三十一、xml序列化需要用到的类

          

    三十二、序列化person对象

      

    三十三、序列化成功

      

    三十四、序列化list集合,注意变化的地方

      

    三十五、list序列化成功

    这样我们通过xml序列化可以非常方便的把一个对象直接写成个xml文件。

    反序列化变成了xmlSer.Deserialize();

       现在讲讲刚才我们提出的问题,为什么需要传递typeof(List<Person>)。我们拿到对象的类型能干什么呢?

    如果一时想不出来,看下下面的案例:

     

    三十六、例题

    像上面这样写,能写进去,但是有个问题,如果我再写几个对象进去,属性这块能不能动态的获取呢?参考下系统给我们提供的方法,反射,通过类型获取成员。xml序列化就是通过反射来完成的。

    自己思考下怎么自己写xml序列化:(小提示)

     

    三十七、小提示

    在xml序列化里面还有一个特性:

     

    三十八、[XmlIgnreAttribute]特性

    接下来我们看下关于深拷贝、浅拷贝的问题:

    这个问题在面试的时候也是时有出现的。我们大家得知道什么是深拷贝、浅拷贝,以及让我们去做的话怎么去实现。

    我写一段代码,大家观察。

     

    三十九、从案例中明白什么是深拷贝,什么是浅拷贝

    下面看如何实现深拷贝、浅拷贝。

     

    四十、浅拷贝是它父类的方法

     测验一下:

                           

    四十一、p1和p2栈地址堆地址不一样

     

    四十二、表示浅拷贝对于引用类型确实指向同一块内存

     

    四十三、实现浅拷贝的代码

     

    四十四、深拷贝的测验

     

    四十五、深拷贝代码

     

    四十六、浅拷贝,深拷贝图解

    作者近期文章列表:

    C#中级进阶教程(完全免费,献给代码爱好者的最好礼物。注:本作者分享自己精心整理的C#中级进阶教程,无任何商业目的。
    希望与更多的代码爱好者交流心得,也请高手多多指点!!!)
    三层及其它内容 递归
    三层(一)
    三层相关案例(及常见的错误)
    三层实例(内涵Sql CRUD)
    手写代码生成器
    SQL数据库 ADO.net 数据库的应用图解一
    数据库的应用详解二
    ADO.NET(内涵效率问题)
    ADO.NET实例教学一
    ADO.NET(内含存储过程讲解)
    面向过程,面向对象中高级 面向过程,面向对象的深入理解一
    面向过程,面向对象的深入理解二
    面向对象的深入理解三
    winform基础 Winform基础
    winform中常用的控件
    面向过程 三种循环的比较
    C#中的方法(上)
    我们常见的数组
    面向对象 思想的转变
    C#中超级好用的类
    C#中析构函数和命名空间的妙用
    C#中超级好用的字符串
    C#中如何快速处理字符串
    值类型和引用类型及其它
    ArrayList和HashTable妙用一
    ArrayList和HashTable妙用二
    文件管理File类
    多态
    C#中其它一些问题的小节
    GDI+ 这些年我收集的GDI+代码
    这些年我收集的GDI+代码2
    HTML概述以及CSS 你不能忽视的HTML语言
    你不能忽视的HTML语言2精编篇
    你不能忽视的HTML语言3
    CSS基本相关内容--中秋特别奉献
    CSS基本相关内容2
    JavaScript基础 JavaScript基础一
    jQuery jQuery(内涵: jquery选择器)
  • 相关阅读:
    高级特性(7)- 高级AWT
    洛谷 P1948 [USACO08JAN]电话线Telephone Lines
    洛谷 P2015 二叉苹果树
    洛谷 P2014 选课
    洛谷 P1560 [USACO5.2]蜗牛的旅行Snail Trails(不明原因的scanf错误)
    cogs 10. 信号无错传输
    cogs 9. 中心台站建设。。。
    洛谷 P1731 生日蛋糕
    洛谷 P1092 虫食算
    洛谷 P1034 矩形覆盖
  • 原文地址:https://www.cnblogs.com/zysbk/p/2808439.html
Copyright © 2020-2023  润新知