一、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的几个要点:

  1. XML是一种可扩展标记语言;
  2. XML的标记没有被预定义,用户可以自行定义标记来描述数据;
  3. XML主要用来描述和存储数据;
  4. XML具有自我描述性;
  5. XML是树状结构的文档,是个结构化的文档;
  6. XML文档是个文本文件;

二、XML语法

  1. 每个开始标记都必须有结束标记;
  2. 一个XML文档只能够有一个根元素;
  3. 所有XML元素必须正确嵌套;
  4. 属性值必须加引号;
  5. 一个元素不能有相同的属性;

  下面以示例来解释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元素之间的关系

  1. 子节点;
  2. 父节点;
  3. 并列节点(兄弟关系);

  下面以一个例子来解释这三种关系。

<?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元素内容里书写小于号,那么可以使用小于号的实体引用,即:&lt; 来替换小于号。

  如:

<person> if age &lt; 10</person>

  是正确的写法。

  (2)在XML里也不能使用&这个字符,因为&被解释为某个实体引用的开始。所以必须使用&的实体引用&amp; 来代替&。

  如:

  • <person>a & b</person>     是错误的
  • <person>a &amp; b</person>  是正确的

  下面给出XML5个预定的实体引用

实体引用 字符 说明
&lt; < 小于号
&gt; > 大于号
&amp; &
&apos; ' 单引号
&quot; " 双引号

  当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文档声明主要有三个参数。

  1. 版本:版本表示遵循的是W3C的XML1.0标准。
  2. 字符编码:字符编码表示该XML文档使用的字符编码方式。对于中文文档,应该使用UTF-8或者Unicode。如果是纯英文,可以使ISO-8859-1编码。
  3. 独立:如果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基础知识的更多相关文章

  1. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  2. C#学习笔记(基础知识回顾)之值类型与引用类型转换(装箱和拆箱)

    一:值类型和引用类型的含义参考前一篇文章 C#学习笔记(基础知识回顾)之值类型和引用类型 1.1,C#数据类型分为在栈上分配内存的值类型和在托管堆上分配内存的引用类型.如果int只不过是栈上的一个4字 ...

  3. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  4. C#学习笔记(基础知识回顾)之值类型和引用类型

    一:C#把数据类型分为值类型和引用类型 1.1:从概念上来看,其区别是值类型直接存储值,而引用类型存储对值的引用. 1.2:这两种类型在内存的不同地方,值类型存储在堆栈中,而引用类型存储在托管对上.存 ...

  5. Quartz学习笔记:基础知识

    Quartz学习笔记:基础知识 引入Quartz 关于任务调度 关于任务调度,Java.util.Timer是最简单的一种实现任务调度的方法,简单的使用如下: import java.util.Tim ...

  6. Docker的学习笔记(一)基础知识

    概述 本人最近在学习docker相关的知识,既是工作本身的需要也是自己对技术的追求的必要,以后我也会推出容器相关的随笔,既可以增长自己的知识,也可以和读者广泛交流,岂不乐乎?话不多说.第一篇先介绍do ...

  7. Scala学习笔记--正则表达式基础知识、如何在scala内使用

    正则表达式语法:https://msdn.microsoft.com/zh-cn/library/ae5bf541(VS.80).aspx 基础知识:正则表达式30分钟入门教程 http://www. ...

  8. (C/C++学习笔记) 一. 基础知识

    一. 基础知识 ● 程序和C/C++ 程序: 根据Wirth (1976), Algorithms + Data Structures = Programs. Whence C: 1972, Denn ...

  9. C#学习笔记(基础知识回顾)之枚举

    一:枚举的含义 枚举是用户定义的整数类型.在声明一个枚举时,要指定该枚举的示例可以包含的一组可接受的值.还可以给值指定易于记忆的名称.个人理解就是为一组整数值赋予意义. 二:枚举的优势 2.1:枚举可 ...

随机推荐

  1. POJ2104 —— K-th number

    1.题目大意:区间第k小,什么修改没有... 2.分析:这个是可持久化线段树,也是主席树,解释一下,n个线段树是怎么存下的,就是每一颗线段树和前一个有logn个点不一样 然后我们只需要一个线段树开lo ...

  2. leetcode 86. Partition List

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  3. python 列表推导式

    squares = [x**2 for x in range(10)] 相当于squares = map(lambda x: x**2, range(10)),但是更简洁和易读.傻逼才会用最古老的fo ...

  4. OpenCV加载图像并显示

    从文件中读取一直一张图片,并加载出来 代码: #include "stdafx.h" #include "iostream" using namespace s ...

  5. PDU与SDU理解

    惯例:首先标注定义,而后是形象的解释. PDU(Protocol Data Unit)协议数据单元 SDU(service data unit)服务数据单元 什么是协议数据单元?就是按照协议的要求来传 ...

  6. Yii2.0中文开发向导——控制器(Controller)

    控制器(Controller) 本节包含以下方面的内容 基本概念 路由 默认路由 动作的参数 在动作中定义参数 从请求(request)中获取参数 独立动作 动作过滤器(Action Filters) ...

  7. 27 GroupSock概述(一)——live555源码阅读(四)网络

    27 GroupSock概述(一)——live555源码阅读(四)网络 27 GroupSock概述(一)——live555源码阅读(四)网络 简介 1.网络通用数据类型定义 2.Tunnel隧道封装 ...

  8. 初识hibernate小案例

    使用hibernate前需要导入相关JAR包. 1.它可以接受词文法语言描述,并能产生识别这些语言的语句的程序 2.是一个Java的XML API,类似于jdom,用来读写XML文件的 3.支持注解配 ...

  9. [转]MySQL主从复制入门

    1.MySQL主从复制入门 首先,我们看一个图: 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中. 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的33 ...

  10. 《Head First Servlet JSP》容器工作原理(如tomcat)