在讲了一系列的基础文档之后,现在开始讲一些实例。对于一些数据不是很大的程序,或者只是一些配置文件,需要本地存储的,完全可以使用XML代替数据库,因为只是去操作单个文件会比操作数据库要简单很多,在程序中访问和操作XML一般使用DOM(文档对象模型)和流模式。DOM运行编辑和更新XML文档,可以随机访问文档中的数据,但有一个缺点,就是在加载XML的时候是会吧整个文档的加载进内存中。流模式很好的解决了这个问题,在对XML文件访问采用的是流的概念,任何时候在内存中只有当前接口,不足的地方是它是只读的,仅向前,不能再文档中去向后编辑增加。

XML(Extensible Markup Language)可扩展的标记语言,XML和HTML有很多地方都非常的类似,但HTML的语法不够严密,很松散,很多的格式没有强制的要求所以尤其在处理浏览器兼容的问题上需要费很大的心思啊,我特别有体会,很多不同的网站系统对浏览器就有要求,标准不统一,所以电脑上谷歌、火狐、360…..一大堆的浏览器就是为了适应不同的网站兼容的问题,XML有着严格的格式要求,比如要求元素必须是一对对显示的,XML还有一个很重要的特性就是通用性高,很多的程序包括Web和App底层数据交换都是转换成XML来进行数据交换的。

下面来看一个简单的XML文档:

 <?xml version="1.0" encoding="utf-8" standalone=”yes”?>

 <!—下面是学生名单-->

 <学生名单>

   <学生  id=”1”>

     <学号>201701</学号>

 <姓名>张三三</姓名>

 <班级>0102</班级>

   </学生>

   <学生  id=”2”>

     <学号>201702</学号>

 <姓名>李四四</姓名>

 <班级>0102</班级>

   </学生>

   <学生  id=”3”>

     <学号>201703</学号>

 <姓名>王五五</姓名>

 <班级>0103</班级>

   </学生>

 </学生名单>

1.文档头部声明:

<?xml version="1.0" encoding="utf-8" ?>

?XML标记说明它是一个XML文档,version为版本号,encoding属性表明是编码格式为”utf-8”,standalone取”yes”时,表明该文件未引用其它外部文件。

2.注释:

<!--下面是学生名单-->

注释的格式和html类似:<!--“注释的内容”-->,使用注释时需要注意:1.注释不可以出现在XML声明之前.2.注释中不可以出现”--”字符,如:<!--下面是学生--名单> 3.注释不可以嵌套.

3.根元素:

<学生名单>  XXX  </学生名单>

每个文档必须有有一个根元素,没有根元素将会在解析的时候出现错误

4.元素(标记),是XML中用来定义数据的一个基本的单位,元素是由标记要定义的,同时标记分为非空标记和空标记:

(1)非空标记

<学号>201701</学号>

<姓名>张三三</姓名>

<班级>0102</班级>

非空即当标记中包含有内容,格式为:<标记>内容<标记>

(2)空标记

<学生 id=”1”></学生>

空标记中只有属性,两个标签中的内容是为空的。

XML位于System.Xml命名空间,以下为XML结构列表:

标 记

描 述

XmlDocument

XML文档

XmlNode

XML中单个的节点,如<学生名单>

XmlAttribute

XML元素中的属性

XmlText

表示元素或属性的文本内容

XmlElement

最小元素,如<姓名>张三三</姓名>

XmlComment

表示XML注释的内容

XmlDeclaration

XML文档第一行的声明

XML文档的创建

最终效果:

<?xml version="1.0" encoding="UTF-8"?>

<学生名单>

<学生 id="1">

<姓名>张三三</姓名>

</学生>

</学生名单>

代码:

 //创建一个XML文档对象

 XmlDocument doc = new XmlDocument();

 //声明XML头部信息

 XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);

 //添加进doc对象子节点

 doc.AppendChild(dec);

 //创建根节点

 XmlElement root = doc.CreateElement("学生名单");

 doc.AppendChild(root);

 //再创建根节点下的子节点

 XmlElement student = doc.CreateElement("学生");

 //设置子节点属性

 student.SetAttribute("id", "");

 //子节点下再创建标记

 XmlElement studentName = doc.CreateElement("姓名");

 //<姓名>的内容

 XmlText xmlText = doc.CreateTextNode("张三三");

 //将内容添加到<姓名>标记

 studentName.AppendChild(xmlText);

 //再将<姓名>标记添加到<学生>标记的子节点下

 student.AppendChild(studentName);

 //最后把<学生>标记添加到根节点<学生名单>子节点下

 root.AppendChild(student);

 //doc文档对象保存写入

 doc.Save("Student.xml");

XML文档的读取

C#中XML读取有三种方式,XmlDocument,XmlTextReader,Linq to Xml,这几种方式中我个人习惯是用Linq,因为Linq去读取、筛选都会很方便,但是由于还没有写关于Linq的文章,这里我们使用XmlDocument的方式。

 XmlDocument doc = new XmlDocument();

 //加载根目录下XML文件

 doc.Load("XMLFile1.xml");

 //获取根节点

 XmlElement root = doc.DocumentElement;

 //获取<学生>子节点

 XmlNodeList personNodes = root.GetElementsByTagName("学生");

 //使用foreach循环读出集合

 foreach (XmlNode node in personNodes)

 {

     string id = ((XmlElement)node).GetAttribute("id");

     string name = ((XmlElement)node).GetElementsByTagName("姓名")[].InnerText;

     string number = ((XmlElement)node).GetElementsByTagName("学号")[].InnerText;

     string _class = ((XmlElement)node).GetElementsByTagName("班级")[].InnerText;

     Console.WriteLine("学生Id:{0},姓名:{1},学号:{2},班级:{3}", id, name, number, _class);

 }

 Console.ReadKey();

增加

 string  xmlPath = "XMLFile1.xml";

 XmlDocument doc = new XmlDocument();

 //加载根目录下XML文件

 doc.Load(xmlPath);

 //获取根节点

 XmlElement root = doc.DocumentElement;

 XmlElement student = doc.CreateElement("学生");

 student.SetAttribute("id", "");

 //添加姓名标记

 XmlElement studentName = doc.CreateElement("姓名");

 XmlText xmlText = doc.CreateTextNode("小明");

 studentName.AppendChild(xmlText);

 //添加学号标记

 XmlElement studentNumber = doc.CreateElement("学号");

 XmlText xmlText2 = doc.CreateTextNode("");

 studentNumber.AppendChild(xmlText2);

 //添加班级标记

 XmlElement studentClass = doc.CreateElement("班级");

 XmlText xmlText3 = doc.CreateTextNode("");

 studentClass.AppendChild(xmlText3);

 //将上面创建的标记添加到<学生>标记

 student.AppendChild(studentName);

 student.AppendChild(studentNumber);

 student.AppendChild(studentClass);

 //将上面创建的标记添加到<学生名单>根标记

 root.AppendChild(student);

 //最后一步不要忘记了保存

 doc.Save(xmlPath);

修改

 string  xmlPath = "XMLFile1.xml";

 XmlDocument doc = new XmlDocument();

 doc.Load(xmlPath);

 XmlElement root = doc.DocumentElement;

 //筛选出符合条件的标记

 XmlElement selectEle = (XmlElement)root.SelectSingleNode("/学生名单/学生[@id='4']");

 //获取该标记下的子元素

 XmlElement nameEle = (XmlElement)selectEle.GetElementsByTagName("姓名")[];

 //修改<姓名>标记中的内容

 nameEle.InnerText = "大明";

 //还是那句话不要忘记保存

 doc.Save(xmlPath);

 删除标记

删除和修改类似,也是筛选出符合条件的标记,然后移除

 string  xmlPath = "XMLFile1.xml";

 XmlDocument doc = new XmlDocument();

 doc.Load(xmlPath);

 XmlElement root = doc.DocumentElement;

 //筛选出符合条件的标记

 XmlElement selectEle = (XmlElement)root.SelectSingleNode("/学生名单/学生[@id='4']");

 //删除指定子元素

 root.RemoveChild(selectEle);

 //还是那句话不要忘记保存

 doc.Save(xmlPath);

以上就是XML基本的操作方法,当然如果使用Linq to Xml的话会更加的灵活,其它的几种操作方法有兴趣的同学也可以直接研究。

C#基础知识-XML介绍及基本操作(十)的更多相关文章

  1. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

  2. python基础知识六 文件的基本操作+菜中菜

    基础知识六 文件操作 ​ open():打开 ​ file:文件的位置(路径) ​ mode:操作文件模式 ​ encoding:文件编码方式 ​ f :文件句柄 f = open("1.t ...

  3. Android中直播视频技术探究之---基础知识大纲介绍

    一.前言 最近各种视频直播app到处都是,各种霸屏,当然我们也是需要体验的,关于视频直播的软件这里就不介绍了,在不是技术的人来看,直播是一种潮流,是一种娱乐方式,但是作为一个高技术的,我们除了看看,更 ...

  4. JAVA基础知识xml,date

    虽然说看文档最好是看官方原来的文档,但是呢,下面是我看别的人的总结,算做抛砖引玉吧,如果有不对的,我会在后期给更正或者自己来写一篇 1,JAVA中对xml的操作,包括schema,dtd等相关知识:标 ...

  5. 浅谈:javascript的面向对象编程之基础知识的介绍

    在进入javascript的面对对象之前,我们先来介绍一下javascript的几个概念. 1.javascript的面向对象的基本概念 function aa(){ } /* * 这里的aa,在我们 ...

  6. linux学习笔记:1.基础知识和命令行基本操作

    初次学习linux系统,想在这里记录自己的学习痕迹,如发现有不足之处,希望能指出,谢谢啦,之后的学习是在虚拟机VMware 10下的Red Hat Enterprise linux 6 的操作. 一. ...

  7. shell 脚本基础知识详细介绍(二)

    SimonSu 博客 评论墙 读者墙 链接 关于 linux中的sh脚本语法 玩linux都知道sh脚本的方便,但如何编写sh脚本却是像我这样的新手和菜鸟的难题.能不能编写得出来是一回事,了不了解又是 ...

  8. Shell脚本基础知识详细介绍(一)

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...

  9. 2-2 groovy基础知识-理论介绍

随机推荐

  1. 蓝桥杯- 移动距离-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  2. springboot(十一):Spring boot中mongodb的使用

    mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...

  3. Python安装mysqldb

    1.根据Python版本和自己的系统下载mysqldb http://www.codegood.com/downloads

  4. [原创]JS实现数据筛选(each)

    做列表的时候,有时候需要按照某些条件进行查询,如班级,分组之类.但是又不想在重新从服务器获取数据,可以进行隐藏

  5. PAT1028. List Sorting (25)---strcmp

    题目链接为:https://www.patest.cn/contests/pat-a-practise/1028 1028. List Sorting (25) Excel can sort reco ...

  6. Fail-Fast机制详解

    Java中的Iterator非常方便地为所有的数据源提供了一个统一的数据读取(删除)的接口,但是在使用的时候容易报如下错误ConcurrentModificationException,原因是在使用迭 ...

  7. Node.js入门以及第一个helloworld程序

    1.概念:简单的说 Node.js 就是运行在服务端的 JavaScript.学之前需要明白Node.js是无法挑战jsp.php或者asp这种老牌网站的地位的,是永远不会出现在证券.金融这种领域的. ...

  8. Day4-软件目录开发规范

    层次清晰的目录结构:1. 可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目.2. 可维护性高: 定义好 ...

  9. 13、Java菜单条、菜单、菜单项

    13.Java菜单条.菜单.菜单项 一般用Java做界面时,都得牵涉到菜单条.菜单.菜单项的设计.菜单项放在菜单里,菜单放在菜单条里,且其字体均可设置. 13.1.菜单条(Menubar) Frame ...

  10. 开涛spring3(6.1) - AOP 之 6.1 AOP基础

    6.1.1  AOP是什么 考虑这样一个问题:需要对系统中的某些业务做日志记录,比如支付系统中的支付业务需要记录支付相关日志,对于支付系统可能相当复杂,比如可能有自己的支付系统,也可能引入第三方支付平 ...