XML语言介绍以及语法讲解

XML介绍

Extensible Markup Language,可扩展标记语言。

XML 不会替代 HTML,理解这一点很重要。在大多数 Web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。

对 XML 最好的描述是:XML 是独立于软件和硬件的信息传输工具。
XML出现的根本目标就在于,描述在现实生活中经常出现的有关系的数据。
在XML语言中,它允许用户自定义标签,一个标签用于描述一段数据,一个标签可以分为开始标签和结束标签,在开始标签和结束标签之间,又可以使用其他标签描述其他数据,以此来实现数据关系的描述。

除了描述有关系的数据,还用做软件的配置文件,描述程序模块之间的关系:
比如一个软件在启动时,需要启动A和B两个模块,但是A和B两个模块在启动时有需要启动A1、A2和B1、B2模块,那么这种关系用XML文件来描述也是最合适不过的了。
(xml最开始是为了替代html的,但是显然失败了)

一个XML文件分为如下几个部分:

1. 文档声明;
2. 元素(标签);
3. 属性;
4. 注释;
5. CDATA区,特殊字符;
6. 处理指令(processing instruction)

1.文档声明

编写XML文档的时候,首先要进行文档声明,声明XML文档的类型。有文档声明的XML文件才是格式良好的文档。

最简单的声明语法:

<?xml version="1.0" ?>

声明了XML的版本号是1.0,没有其他信息。注意,其中前面的和?之间的空格是英文半角空格,不是中文的全角空格,不能出错。
如何检测一个XML文件的文档格式是否正确,就是直接右键把这个文件用IE浏览器打开,如果可以打开,就说明格式首先没问题。IE可以当做一个XML的解析工具。

在文档声明里也可以增加encoding属性,说明文档的字符编码:

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

这里的编码就是UTF-8,一旦文档里有中文数据,那么一定要告诉解析引擎用什么编码来处理中文,如果没有encoding属性告诉用什么编码处理,就会报错。

有些时候,用记事本编辑这样第一个xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<soft>
    <a>
        <a1>中国</a1>
        <a2></a2>
    </a>
    <b>
        <b1></b1>
        <b2></b2>
    </b>
</soft>

再次打开ie会打不开,又是乱码问题(我的电脑没有这种情况),原因是因为,虽然这个xml文件声明UTF-8的编码,但是在保存的时候,是记事本这个软件保存的,保存在内存里,是要进行编码的,那么,记事本的默认保存的时候,进行编码的码表可能不是utf-8,因此再此用IE浏览器打开的时候,读硬盘,那么为了显示,读到字符的时候,为了显示内容,会用这个文档的最开始的utf-8编码,去解码,可能就会乱码。为了文档的通用性,那么在编写XML文件保存的时候,把软件都设置为编码格式是UTF-8编码会比较好
但是呢,如果我们用eclipse做开发,这些问题都不是问题了。

文档声明里还可以增加另外一个属性,standalone属性,它用来说明文档是否独立:

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

当standalone属性为no的时候,依赖于别的文档。

2.元素(标签)

XML元素就是指XML文件中出现的标签,一个标签分开为开始标签和结束标签,书写形式可以包含标签体,也可以不包含标签体:

<a>www.baidu.com</a>
<a></a>

上面的标签a里面包含的就是标签体,下面的不含标签体的可以简写成</a>

标签中可以嵌套,但是不能交叉。(显然前面简介xml文档的时候已经知道了,内部嵌套的先开始肯定要先结束,因为他是层层包裹的)标签里嵌套的标签叫子标签。

格式良好的XML文档有且只能有一个根标签,其他都是这个根标签的子孙标签。父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。
所有的元素都可以有文本内容和属性(类似 HTML 中)。

对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:

<网址>www.baidu.com</网址>

这段内容和:

<网址>
    www.baidu.com
</网址>

含义是不一样的:上面是一个网址标签,里面嵌套了内容。下面的网址标签里包含的还有换行和空格,对于解析引擎来说,是完全不一样的。

这是由于在XML中,空格和换行都作为原始内容被处理,因此不能为了让文件内容清晰可读,就乱加缩进和空格。

XML元素的命名规范:可以包含字母、数字以及其他一些可见字符,但是必须遵守下面的规范:

1. 区分大小写,例如,<P>和<p>是不同的标记
2. 不能以数字或下划线开头
3. 不能以xml(或XML或Xml等等)开头,类似java的关键字
4. 不能包含空格
5. 名称中间不能包含冒号

在 XML 中,一些字符拥有特殊的意义。如果把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始,显然就像是一个新的标签。那么小于号想要表示,要用什么呢,要用&lt;
这是XML中的特殊字符实体引用:

在这里插入图片描述

在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。

3.属性

一个标签可以有多个属性,每个属性都有他自己的名字和取值,并且属性值内容一定要用双引号或者单引号引起来,例如:

<input name="text">

定义属性的时候,遵循和定义标签一样的命名规范。

注意,在XML技术里,标签的属性代表的信息,也可以改成用子标签(子元素)的形式来描述,例如上面的input标签里有name属性,也可以改成这样:

<input>
    <name>text</name>
</input>

(毕竟XML是用来保存数据,那属性值用子标签来封装也一样)

元素&属性:

<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>


<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>

第一个例子里,sex是属性,第二个例子里,sex是元素。

这两个例子提供了一样的信息。

W3C的建议是,在html里,属性用起来很方便,但是在XML里,应该尽量避免使用属性,而尽可能使用元素,为什么呢?

  • 属性不能包含多个值(元素可以)
  • 属性不能包含树结构(元素可以)
  • 属性不容易扩展(为未来的变化)

4.注释

XML中的注释采用和html一样的格式:

<!--注释内容-->

注释不能嵌套,并且 一定要写在文档声明之后,想想,文档声明声明了这个文档是XML格式,然后下面注释的格式才能被识别出来这是注释。

5.CDATA区

在XML文档里有些内容不想让解析引擎解析执行,而是当做原始内容处理,就像上面的特殊字符,说过了的例子,"<" 会产生错误,因为解析器会把该字符解释为新元素的开始;"&" 会产生错误,因为解析器会把该字符解释为字符实体的开始。

那在某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。 CDATA 部分中的所有内容都会被解析器忽略解析程序不会处理而是直接原封不动的输出。

语法如下, 由 “<![CDATA[" 开始,由 "]]>” 结束:

<script>
<![CDATA[
function matchwo(a,b) {
 if (a < b && a < 0)
 then { return 1; }
 else
 { return 0; }
 }
 ]]>
 </script>

(显然,变成CDATA的语法,后面增加了“]]>”,显然在CDATA的内容里就不能出现这个字符串, 不然就会出现错误)

6.处理指令PI

处理指令(PI,processing instruction),用来指挥解析引擎如何解析XML文档的内容。

例如在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档的内容:

<?xml-stylesheet type="text/css" href="1.css" ?>

处理指令要以<?为开头,?>为结尾。看他的格式就可以发现,我们的XML文档开始的第一行文档声明的那一行其实也是一个处理指令。

那么其实XML文档来保存数据,然后用css文档来设置显示的格式。( 但是W3C 推荐用CSS格式化XML不常用,这组织推荐使用 XSLT+XML)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值