Xml简单的历史介绍
1969 gml(通用标记语言) [主要的目的是要在不同的机器进行通信的数据规范]
1985 sgml(标准通用标记语言)
1993 html (www网)
Html语言本身是有一些缺陷的
(1) 标记不能自定义
<html>
<table>
<hsp></hsp>
</table>
</html>
(2) html本身缺少一些含义
<h1>水浒英雄</h1>
<table>
<tr><td>宋江</td><td>及时雨</td></tr>
</table>
(3) html本身没有真正的国际化
html->xhtml->xml
1998 xml
Xml : extensiable markup language 可扩展标记语言
为什么要学习xml
(1) 需求
(2) 做配置文件
(3) xml文件还可以描述很复杂的数据关系
比如 家谱…
Xml的常见应用
(1) 数据传送通用格式
(2) 配置文件
(3) 充当小型数据库
Xml语法
入门案例: 用xml来记录一个班级信息
<?xml version="1.0"encoding="gb2312"?>
<class>
<stu id="a001">
<name>杨过</name>
<sex>男</sex>
<age>30</age>
</stu>
<stu id="a002">
<name>李莫愁</name>
<sex>女</sex>
<age>20</age>
</stu>
</class>
☞ 编码问题:
ansi 编码 是 american national standard insititu 美国国家标准协会 ,
ansi 编码在不同的国家不一样的 ansi ->gb2312 anis-gbk big5
日本 ansi->日文操作系统默认的编码.
xml的语法
(1) 文档声明
<?xml version=”1.0” encoding=”编码方式” standalone=”yes|no”?>
(2) 一个xml 文档中,有且只有一个根元素
元素==标签==节点
(3) 在xml中
<name>xiaoming</name>
不等价与==
<name>
xiaoming
</name>
(4) 属性值用双引号(")或单引号(')分隔(如果属性值中有',用"分隔;有",用'分隔)
特别说明: 如果属性值有单引号,有双引号,则需要使用实体:html-> ©
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
|
|
<stuid="a"0'0'1">
<name>杨过</name>
<sex>男</sex>
<age>30</age>
</stu>
(4) CDATA节
有时我们希望传递一些特殊字符, <>@!#$%^&*( 可以使用 CDATA节包括
基本用法:
<intro><![CDATA[这个是好$$128qw8o8<Lk;>;akdf0sa98u329408><<K>>>学生]]></intro>
面试题:
问; 如何适用xml 去传递小图片
答: 可以把文件读取成一个 byte[] ,然后放到 CDATA节,再传递.
(5) 处理指令
看一个案例:
<?xml version="1.0"encoding="utf-8"?>
<?xml-stylesheet href="my.css"type="text/css"?>
<class>
<!--学生信息-->
<stuid="a"0'0'1<" >
<name>杨过</name>
<sex>男</sex>
<age>30</age>
</stu>
<stu id="a002">
<name>李莫愁</name>
<sex>女</sex>
<age>20</age>
</stu>
</class>
my.css
name{
font-size:100px;
font-weight:bold;
color:red;
}
sex{
font-size:50px;
font-weight:bold;
color:blue;
}
age{
font-size:20px;
font-weight:bold;
color:green;
}
xml语法小结:
XML声明语句
<?xml version="1.0"encoding="gb2312"?>
– 必须有且仅有一个根元素
– 标记大小写敏感
– 属性值用引号
– 标记成对
– 空标记关闭
– 元素正确嵌套
– 名称中可以包含字母、数字或者其它字符
– 名称中不能含空格 测
– 名称中不能含冒号(注:冒号留给命名空间使用) 测
dtd
基本概念: dtd ( document type definition 文档类型定义),该文件一般和xml文件配合使用, 主要的用处是约束 xml, 除了 dtd 技术外, 还有一个schema的技术也可以用于约束xml文件的书写规范.
现在请看一个问题:
<stuid="a"0'0'1<" >
<name>杨过</name>
<sex>男</sex>
<age>30</age>
<介绍>我是好人</介绍>
<面积>100平</面积>
</stu>
怎么解决xml过于自由的问题:->dtd
xml 和 dtd关系
快速入门案例:
基本语法是:
<!ELEMENT元素名 类型>
xml:
<?xmlversion="1.0" encoding="utf-8"?>
<!--引入dtd去约束该xml文件-->
<!DOCTYPE班级 SYSTEM"myClass2.dtd">
<班级>
<学生>
<名字>周星驰</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
</学生>
<学生>
<名字>林青霞</名字>
<年龄>32</年龄>
<介绍>是一个好学生</介绍>
</学生>
</班级>
myClass2.dtd
<!ELEMENT班级 (学生+)>
<!ELEMENT学生 (名字,年龄,介绍)>
<!ELEMENT名字(#PCDATA)>
<!ELEMENT年龄(#PCDATA)>
<!ELEMENT介绍(#PCDATA)>
完成校验的html
<html>
<head>
<!--自己编写一个简单的解析工具,去解析xml dtd 是否配套-->
<scriptlanguage="javascript">
<!--
var xmldoc = newActiveXObject("Microsoft.XMLDOM");
xmldoc.validateOnParse ="true";//开启校验
xmldoc.load("myClass2.xml");//指定校验哪个xml文件
document.writeln("错误信息是:"+xmldoc.parseError.reason+"<br/>");
document.writeln("错误的行是:"+xmldoc.parseError.line);
//-->
</script>
</head>
<body>
</body>
</html>
u dtd的细节
(1) dtd 的分类
内部 dtd
外部 dtd
内部DTD文档
<!DOCTYPE根元素 [定义内容]>
外部DTD文档
<!DOCTYPE根元素 SYSTEM "DTD文件路径">
(2) 在xml中引入dtd 有两种方法
1. 引入本地 dtd
<!DOCTYPE根元素 SYSTEM ‘地址’>
2. 引入公共的 dtd
<!DOCTYPE根元素PUBLIC ‘地址’>
(2)
<!ELEMENT 元素名 类型>
类型:
EMPTY, ANY , #PCDATA
(3) dtd的修饰符
(4) 属性的细节
基本语法
<!ATTLIST元素名
属性名类型 特点
.....
>
l 类型有 五种:
CDATA 表示可以放入文本
ID 表示属性的值,不能重复,同时不要用数字开头.
IDREF/IDREFS 当一个元素的属性值,需要去引用另外一个ID ,则使用IDREF,如果希望引用多个,则使用IDREFS,请用空格隔开.
Enumerated 表示属性的值,只能是例举出了比如
<!ATTLIST学生
地址 CDATA #FIXED "北京"
学号 ID #REQUIRED
大哥 IDREFS #REQUIRED
性别 (男|女) #REQUIRED
>
ENTITY
l 属性的特点有四种
#REQUIRED 表示必须有