1.xml简介
1.1xml简单的历史介绍
xml是一种可扩展的标记语言,xml本身设计出来是用来替代HTML语言的,因为HTML有不少的缺陷,HTML语言的标记不能自己定义,HTML语言的标记本身不能用来描述数据,HTML语言的标记没有国际化(各种浏览器上的显示效果可能不一样,达不到统一的效果),但是还是有一定的差异的,所以中间出现了一种过渡语言XHTML。实际上xml已经很难替代HTML语言了,因为HTML在万维网上的运用已经太广泛了,想要改变已经很难了。
1.2xml有哪些作用
第一个需求:数据的传输需要一定的格式,xml可以写出一些约束条件
1.数据的可读性
2.将来的发展
3.将来的维护
第二个需求:配置文件,
第三个需求:保存数据,充当小型数据库。(数据一般使用数据库保存,也可以使用文件保存,使用xml文件保存时,读取数据的速度比数据库存取要快的多,但是这样就很不安全)
1.3xml与html的差异
xml不是html的替代,xml和html为不同的目的而设计的
XML被设计为传输和存储数据,其焦点是数据的内容。通过xml,可以在不兼容的系统之间轻松的交换数据
HTML被设计用来显示数据,其焦点是数据的外观。
HTML旨在显示信息,而XML旨在存储和传输信息。
1.4xml的一些认识
xml是不作为的,xml不会做任何事情,xml是用来结构化、存储以及传输信息的。
<note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
这个标签是一封信,包含了发送者和接受者。但是这个xml文档没有做任何事情,他仅仅是一个纯文本文件,我们需要编写软件和程序才能完成这封信的发送。
通过xml可以定义自己的标签,这是html所不能完成的,html的标签都是预定义好的,html文档只能使用定义好的标签进行编写。
2.编写一个良构的xml文件有哪些规则
2.1文档声明
xml文件的后缀为.xml,xml文本都有一个头部声明,用来告诉解析器一些相关的信息,
<?xml version="1.0" encoding="UTF-8"?>
该头部声明表示这个文件是xml文件,xml版本内容为1.0版本,文件内容的编码格式为utf-8.
2.2xml文档必须有根目录
xml文档必须有一个元素是所有其他元素的父元素,该元素称为根元素。
<root> <child> <subchild>.....</subchild> </child> </root>
2.3所有xml元素都必须有关闭标签
在HTML中经常会看到一些没有关闭的标签。
<p>This is a paragraph
<p>This is a another paragraph
在xml中,省略关闭标签是非法的。所有元素都必须有关闭标签。
<p>This is a paragraph</p>
2.4xml标签对大小写敏感
xml元素使用xml标签进行定义,xml标签对大小写敏感。在xml标签中,<nihao>和<Nihao>是不一样的标签。
必须使用相同的大小写来编写打开标签和关闭标签
<Message>这是错误的。</message>
<message>这是正确的。</message>
2.5xml必须正确的嵌套
在HTML中,经常会看到一些没有正确嵌套的元素:
<b><i>This text is bold and italic</b></i>
在xml中,所有元素都必须被正确的嵌套:
<b><i>This text is bold and italic</i></b>
在上例中,正确嵌套的意思是:由于<i>元素是在<b>里面打开的,所以它必须在<b>里面就关闭掉。
2.6xml属性值必须加引号
在xml文档中,xml的属性必须加引号。以下是两个xml文档,一个是正确的一个是错误的
<note date=08/08/2008> <to>George</to> <from>John</from> </note>
<note date="08/08/2008"> <to>George</to> <from>John</from> </note>
第一个是错误的,note元素中的date属性是没有加引号的,这是不可以的。
2.7xml中的注释
在xml文档中编写注释的方法与HTML的很类似
<!-- this is a comment-->
2.8在xml中,空格会被保留
在HTML中,会把许多个连续的空格裁剪我一个,在xml中,文档中的空格是不会被删节的。
2.9实体引用
在xml中,一些字符都拥有特殊的含义。
如果把"<"放在xml元素中,会发生错误,因为解析器会把它当做新元素的开始。这样会产生xml错误:
<message>if salary < 1000 then</message>
为了避免这个错误,xml中可以用一些实体引用来代替"<"号字符
<message>if salary &alt; 1000 then</message>
在xml中,有五个已经定义好的实体引用我们可以作为使用
&alt | < | 小于 |
> | > | 大于 |
& | & | 和号 |
&apos | ’ | 单引号 |
" | " | 引号 |
注释:在xml中,只有字符"<"和"&"确实是非法的。大于号是合法的,但是实体引用来代替它是一个好习惯。
2.10PCDATA和CDATA
PCDATA(Parsed Character Data):指可以被xml解析器解析的内容,有些特殊字符需要借助实体来被解析器解析,XML中的正常内容都是属于PCDATA。
CDATA(Character Data):指不会被xml解析器解析的内容,按照字符串原样输出。
语法:<![CDATA[要原样输出的内容]]>
如:<![CDATA["你好啊 &"'abc"]]>
输出结果:"你好啊 &"'abc"
三、xml的处理指令和命名空间
3.1处理指令的一些操作
处理指令,简称PI。简而言之处理指令是用来指挥解析引擎如何解析xml文档内容的。
例如,在xml文档中可以使用xml-stylesheet指令,通知xml解析引擎,使用css文件显示xml文档。
<?xml-stylesheet type="text/css" href="css文件路径"?>
处理指令必须以<?作为开头?作为结尾>,xml文件的头部指令就是一种常见的处理指令,告诉处理引擎一些相关的信息。
一个xml文件中可以有不止一个处理指令,可以是很多个的。例如,class.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="class.css" type="text/css"?> <class> <student id="001"> <name>张三</name> <age>20</age> </student> <student id="002"> <name>李四</name> <age>20</age> </student> </class>
3.2xml命名空间
在xml中,元素名称都是由开发者定义的,那么在使用两个xml文档中可能会遇到一样的元素名称,这里就涉及到命名空间的问题。
1:使用命名空间
语法:xmlns:namespace-prefix="namespaceURI"(一般都是公司的域名)
使用范围:当前标签以及子标签
例如:
<students1:students xmlns:students1="http://briup.com/students1"> <students1:student> <students1:name>张三</students1:name> </students1:student> <students1:students>
在这里,使用了前缀和xmlns属性,这样就为前缀赋予了一个与命名空间相关的限定名称。
注:用于标示命名空间的URL不会被解析器用于查找信息,其唯一的作用是赋予命名空间一个唯一的名称。
2:使用默认的命名空间
为元素定义默认的空间名称可以让我们省去所有的子元素中使用前缀的工作。
语法:xmlns="namespaceURL"
<students xmlns="http://briup.com/students1"> <student> <name>张三</name> </student> <students>