一,XML(eXtensible Markup Language)
1. 简介:
可扩展标记语言,是一种标签语言。常用于接口语言使用。
2. xml与html的区别:
① XML标签:是自定义的标签,结构与样式分离;被设计用来传输和存储数据。
② HTML标签:是固定的标签,结构与样式结合在一起;被设计用来显示数据。
3. xml的应用:
msn在本地以xml进行存储聊天记录。
4.xml与html的发展历史:
1998年出现,是为了把html给替换掉。因为要消耗很多人力财力,代价比较大,最后也没有替换成功。
xhtml:内部技术都是xtml,标签都是html的。
5. xml的作用:
① 可以当作小型数据库使用:msn聊天工作通过xml文件在本地保留聊天记录信息。
② 可以在网站里当作接口服务使用。
③ 可以当作配置文件使用:例如在项目里把数据库的主机名、用户名、密码在xml里配置好。
6.xml的语法标准:
1)声明一个处理指令<?xml version="1.0" encoding= "utf-8"?>;
xml内容可以被浏览器直接解释运行,当看到处理指令的时候会自动调用xml解释器。
关于头文件属性的解释:
- version:xml的版本 1.0(文中使用的版本) 1.1
- encoding: xml编码 gbk utf-8 iso8859-1(不包含中文) 等等 ,这个编码指定打开该文件时读取文件内容的编码,不是保存的编码
- standalone:是否需要依赖其他文件yes/no
2)xml文档的树状结构有且只有一个根节点,必须写根结点。
3)标签必须闭合
4)标签大小写一致(建议小写)
5)属性全小写,属性必须有值,值必须有引号(单双都可)
6)标签可以嵌套,但不可以交叉
7)特殊符号使用符号实体(单引号' 双引号" 空格 符号&anp;)
8)大段内容有特殊内容<![CDATA[]]>表示。解释器会把特殊字符当文本内容,而不是标签
9)空标记闭合/单标签。
10)xml标签名字组成部分:
11) 在xml中把换行和空格都当成内容来解析,以下爱两种表示内容不同。
<a>1111</a>
<a>
1111
</a>
12)注释:<!---->,注释不能嵌套也不能放在第一行。
二,XML文件解析的方式
1.SAX读取方式:根据程序员需要,一次只将若干个标签加载到内存中去。 采用事件驱动,边读边解析,从上到下,一行一行的解析。
优点:节省内存。
缺点:读取大量标签信息的时候,效率低。
2.DOM读取方式:一次性加载所有xml文档所有的内容,加载到内存中。根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性,文本都封装为对象。
优点:如果读取大量标签信息的时候,此时由于在内存中进行定位所以运行速度很快。
缺点:浪费内存。
三,XML约束文档
1.xml约束文档作用:
1)设置可以当前XML文档声明的【标签类型名】
2)设置可以在标签中出现的【属性名】
3)设置标签之间父子关系和兄弟关系
2.XML约束文档分类:
1)DTD约束文档(简单约束文档):后缀名.dtd
如:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 第一句为了声明这是一个xml文件-->
<!--
1.<!ELEMENT 标签类型名>: 声明可以在xml文档中出现的标签类型名
2.<!ATTLIST 标签类型名 属性名>:声明可以在当前标签内部使用属性名称
3.<!ELEMENT 标签类型名(子标签名?)>:子标签可以出现父标签内部,也可以不出现,如果出现只能出现一次。
4.<!ELEMENT 标签类型名(子标签名+)>:子标签必须出现父标签内部,并且可以出现多次
5.#PCDATA 表示当前标签没有子标签
6.<!ELEMENT 标签类型名(子标签名*)>:子标签可以出现也可以不出现,可以多次
7.<!ELEMENT 标签类型名(子标签名)>:必须出现,只一次
8.<!ELEMENT 标签类型名(子标签名|子标签2)>:这两个子标签必须有一个子标签出现
-->
<!-- 使用DTD文档前,必须将以下代码导入到目标文件:导约束
<!DOCTYPR web-app SYSTEM "web-app_2_3.dtd">
-->
<!ELEMENT web-app (servlet*,servlet-mapping*,welcome-file-list?)>
<!ELEMENT servlet (servlet-name,description?,(servlet-class|jsp-file))>
<!ELEMENT servlet-mapping (servlet-name,url-pattern)>
<!ELEMENT servlet-name (#PCDATA)>
<!ELEMENT servlet-class (#PCDATA)>
<!ELEMENT url-pattern (#PCDATA)>
<!ELEMENT jsp-file (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT welcome-file-list (welcome-file+)>
<!ELEMENT welcome-file (#PCDATA)>
<!ATTLIST web-app version CDATA #IMPLIED>
<!ATTLIST web-app name CDATA #IMPLIED>
那么配置的xml文件必须为:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<!--引入外部dtd约束 -->
<web-app version="3.0" name="13">
<servlet>
<servlet-name>A </servlet-name>
<servlet-class>3</servlet-class>
</servlet>
<welcome-file-list>
<welcome-file>
index.html
</welcome-file>
</welcome-file-list>
</web-app>
2)SHEMA约束文档(高级约束文档):缀名.xsd
3.区别与联系
1.两种约束文档不能同时出现
2.SHEMA支持前缀名,多个.XSD文件存在时,可以做区分。
4.tld文件与dtd文件
dtd文件是对XML文件元素类型定义的一个约束,如struts2.xml中的struts2.xml文件里具体可以使用哪些标签,标签下还可以有哪些标签,及标签内可以使用哪些属性,这些都可以去查看struts2.xml的dtd文件,dtd文件里有明确定义。
tld文件是标签定义文件,如struts2.xml的一些标签要能再页面上使用,必须加载标签库(tld文件),开发者可以仿照来定义自己的标签,tld文件中对应标签对应了一些类的方法,当在页面使用标签的时候,会调用对应类的方法。
tld中的标签是要靠dtd来约束哪些标签可以使用的。