.net学习笔记---xml基础知识
一、XML简介
XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据。XML文档以.xml为后缀。需要彻底注意的是XML是区分大小写的。
先从一个简单的XML例子来了解下xml基础:
<?xml version="1.0" encoding="utf-8" ?>
<books ISBN="9787544238212">
<title>xml学习笔记</title>
<price>30</price>
<pagecount>300</pagecount>
</books>
第一行表明,本XML遵守的版本是1.0,使用的字符编码是UTF-8字符集。
每个XML元素都已一个起始标记开始和一个结束标记结束。比如开始:<title>,结束:</title>。XML元素可以带有属性,属性值要加引号。比如上例中的ISBN就是属性,属性值要加双引号。同时用等号连接。
一个XML文档只能够有一个根节点,如上例中books就是根节点。
以下列出XML的几个要点:
- XML是一种可扩展标记语言;
- XML的标记没有被预定义,用户可以自行定义标记来描述数据;
- XML主要用来描述和存储数据;
- XML具有自我描述性;
- XML是树状结构的文档,是个结构化的文档;
- XML文档是个文本文件;
二、XML语法
- 每个开始标记都必须有结束标记;
- 一个XML文档只能够有一个根元素;
- 所有XML元素必须正确嵌套;
- 属性值必须加引号;
- 一个元素不能有相同的属性;
下面以示例来解释XML常用的术语。
1、标记
标记分为开始标记和结束标记,如<title>就是一个开始标记。</title>就是一个结束标记。开始标记与结束标记之间的内容成为XML元素的内容。如果一个XML元素没有内容,我们称其为空元素。如<title></title>。
2、元素
XML元素是从一个开始标记到它结束标记的一段内容。比如 <title>XML学习笔记</title> 就是一个元素。
3、属性
一个元素可以带有属性,属性写在开始标记里,写在元素名称的后面。比如<books ISBN="9787544238212">,其中ISBN="9787544238212"就是books元素的一个属性。ISBN 是属性的名称, 9787544238212 是属性值。一个XML元素不能有相同的XML属性名。
三、XML元素之间的关系
- 子节点;
- 父节点;
- 并列节点(兄弟关系);
下面以一个例子来解释这三种关系。

<?xml version="1.0" encoding="utf-8" ?>
<father>Tom Smith
<son>
John Smith
<grandson>Hans Smith</grandson>
</son>
<daughter>Jane Smith</daughter>
</father>

在上面的例子中,son元素就是father元素的子节点。father元素就是son元素和daughter元素的父节点。son元素和daughter又称并列节点。
XML元素中可以带有属性作为XML元素的附加信息。
如果属性值中包含双引号,就用单引号包围属性值。如:
<site info = 'wo "ai" ni'>
如果属性值中包含单引号,就用双引号包围属性值。如:
<site info = "wo 'ai' ni">
一个XML元素可以有一个或多个属性,每个属性用空格分开。如:
<person name="zhangsan" age="23">
四、XML名称命名规则
XML的名称可以包含英文字母和数字,或者其他字符比如下划线。XML名称不能以数字或者标点符号开头,XML不能以xml开头(或者xml的大小写,因为这是XML相关标准的保留词)。XML名称不能包含空格,虽然XML名称支持下划线(_)、连字符(-)、句号(.)和冒号(:),但XML开头不能使用连字符(-)、句号(.)和冒号(:)。
1、XML实体应用
(1)、在XML标记里除了表示一个标记的开始之外,不允许有小于号<,因为小于号总是被XML解析器解释为一个标记的开始。
如 :
<person> if age < 10 </person>
这行代码是错误的,如果一定要在XML元素内容里书写小于号,那么可以使用小于号的实体引用,即:< 来替换小于号。
如:
<person> if age < 10</person>
是正确的写法。
(2)在XML里也不能使用&这个字符,因为&被解释为某个实体引用的开始。所以必须使用&的实体引用& 来代替&。
如:
- <person>a & b</person> 是错误的
- <person>a & b</person> 是正确的
下面给出XML5个预定的实体引用
实体引用 | 字符 | 说明 |
< | < | 小于号 |
> | > | 大于号 |
& | & | 和 |
' | ' | 单引号 |
" | " | 双引号 |
当XML解析器解析含有上述实体引用的XML文档时,会将这些实体引用转换成相应的字符。
只有<和&在XML是非法的。另外几个是合法的,可以直接写,只是用实体引用更加清晰而已。
2、XML CDATA区
当需要往XML文档里添加一段内容,而内容里有很多<或者&的时候,将所有<或&转换为实体引用是很麻烦的事情,这时候可以使用CDATA区,在CDATA区里不必使用实体引用,因为XML解析器不会计算CDATA区里的内容。
CDATA区以 <![CDATA[ 开始 ,以 ]]> 结束
示例如下:

<mycode>
<![CDATA[
<html>
<title></title>
<body></body>
</html>
]]>
</mycode>

需要注意的是:在CDATA区内,不能出现 ]]>
3、XML注释
XML注释以 <!-- 开始,以 --> 结束。
示例:
<!-- 这是注释 -->
在XML注释里面,除了结束符-->,不能出现两个连字符--。XML注释也可以放在元素内容里。
4、XML声明
XML文档应当以XML声明开始,不过不是必须的。
示例:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<person>
张三
</person>
如果一个XML文档含有声明,必须放在XML文档的第一行。
XML文档声明主要有三个参数。
- 版本:版本表示遵循的是W3C的XML1.0标准。
- 字符编码:字符编码表示该XML文档使用的字符编码方式。对于中文文档,应该使用UTF-8或者Unicode。如果是纯英文,可以使ISO-8859-1编码。
- 独立:如果XML standalone的值是no,表示它需要DTD。不需要DTD的XML文档,standalone的值应该写为yes。
5、格式正确的XML文档。
- 每个开始标记必须有结束标记。
- XML文档只有一个根元素。
- XML元素必须被正确嵌套。
- XML元素不能有相同名称的属性。
- XML属性值必须加引号。
- XML注释不能卸载标记里。
- XML文档里不能出现<和&标记。必须用实体引用代替。
6、XML命名空间
XML命名空间是为了解决当XML文档中存在多个相同名称的元素时,避免冲突而引入的。
命名空间的语法:
- xmlns:prefix="URI"
- xmlns:表示必须的属性。
- prefix:表示命名空间的别名,它的值不能为xml。
- URI:用来标识抽象或物理资源的的紧凑字符串。为了保证标识的唯一性,xml采用Internet上的网址作为这个标识符,因为网址是独一无二的。
默认命名空间示例:
<?xml version="1.0" encoding="utf-8" ?>
<Article xmlns="http://www.xxx.com/"> <!--默认命名空间-->
<author age="30">张三</author>
<length>12000</length>
<price>42</price>
</Article>
带名字的命名空间|:
<?xml version="1.0" encoding="utf-8" ?>
<h:Article xmlns:h="http://www.xxx.com/"> <!--带前缀的命名空间-->
<h:author age="30">张三</h:author>
<h:length>12000</h:length>
<h:price>42</h:price>
</h:Article>
7、DTD和XML Schema
DTD文档类型定义,是一套关于标记符的语法规则。它是XML1.0班规格的一部分,是XML文件的验证机制。属于XML文件组成的一部分。DTD是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包括:元素的定义规则,元素间关系的定义规则,元素可使用的属性、可使用的实体或符号规则。不同的公司之需定义好标准的DTD,个公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准与交换数据。这样便满足了网络共享和数据交互。
DTD文件是一个ASCII的文本文件,后缀名为.dtd。每一个XML文档都可以携带一个DTD,用来对该文档格式进行描述,测试该文档是否为有效的XML文档。
XML Schema如果DTD一样是负责定义和描述XML文档的结构和内容模式的。它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型。是针对DTD的某些缺点,如:DTD不支持数据类型,扩展性较差等而出现的。
XML Schema具有以下优点:
- 一致性:Schema使得XML得定义不必再利用一种特定的形式化语言,而是直接借助XML自身的特性,利用XML的基本语法规则来定义XML文档的结构。
- 扩展性:Schema对DTD进行了扩充,引入了数据类型,命名空间,从而具备较强的可扩展性。
- 互换性:利用Schema,我们能够书写XML文档以及验证文档的合法性。另外通过特性的映射机制,还可以将不同的Schema进行转换,以实现更高层次的数据交换。
- 规范性:同DTD一样,Schema野提供了一套完整的机制以约束XML文档中的标记的使用。相比之下Schema基于XML,更具有规范性。
- XML Schema的限制功能例如:那些元素可以出现在文档中,元素间的关系是什么,每个元素有那些内容和属性以及元素出现的顺序和次数等等。
.net学习笔记---xml基础知识的更多相关文章
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)
一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...
- C#学习笔记(基础知识回顾)之值传递和引用传递
一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...
- C#学习笔记(基础知识回顾)之值类型和引用类型
一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...
- Quartz学习笔记:基础知识
Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...
- Docker的学习笔记(一)基础知识
概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...
- Scala学习笔记--正则表达式基础知识、如何在scala内使用
正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...
- (C/C++学习笔记) 一. 基础知识
一. 基础知识 ● 程序和C/C++ 程序: 根据Wirth (1976), Algorithms + Data Structures = Programs. Whence C: 1972, Denn ...
- C#学习笔记(基础知识回顾)之枚举
一:枚举的含义 枚举是用户定义的整数类型.在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值.还可以给值指定易于记忆的名称.个人理解就是为一组整数值赋予意义. 二:枚举的优势 2.1:枚举可 ...
随机推荐
- HTTP及状态码汇总
什么是HTTP: HTTP(HyperText Transfer Protocol超文本传输协议)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准,为了提供一种发布和接收HTM ...
- cocos2d事件处理机制之我见
cocos2d是使用pyglet事件框架来处理事件的. 其中,包括分发器(发射器)和监听器两部分.下面形象的来打个比方. 这个机制就好比一把枪,三步:扣扳机(触发),上弹(注册),给子弹上***(这个 ...
- ionic中返回上一页
.controller('NewsCtrl', ["$scope", "$ionicHistory", "$http","$tim ...
- Android中的“再按一次返回键退出程序”实现
用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dial ...
- Github如何更新远程代码
1.git add . 2.git commit -m "Second commit" 3.git push origin master
- Mysql报错Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
安装mysql后,启动时候没有启动成功,查看了下日志报错如下:---------------------------------------------1 可以:初始化mysql:mysql_in ...
- Apache 配置参考
1.什么是Apache ? Apache,是一种开放源码的HTTP服务器,可以在大多数操作系统中运行,由于其多平台和安全性所以被广泛使用,是目前最流行的Web服务器软件之一.Apache 起初由 Il ...
- 【Networkk】一篇文章完全搞清楚 scoket read/write 返回码、阻塞与非阻塞、异常处理 等让你头疼已久的问题
浅谈TCP/IP网络编程中socket的行为 我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗 ...
- UNIX进程
UNIX进程控制的博客 http://blog.csdn.net/yang_yulei/article/details/17404021 Linux的概念与体系 http://www.cnb ...
- poj 3268(spfa)
http://poj.org/problem?id=3268 对于这道题,我想说的就是日了狗了,什么鬼,定义的一个数值的前后顺序不同,一个就TLE,一个就A,还16MS. 感觉人生观都奔溃了,果然,题 ...