XML的学习目标:
能用XML描述现实中的有层次关系的数据
能使用程序读取到XML中表示的数据(解析Parser)
1、XML是什么?做用是什么?
一、XML是指可扩展标记语言(eXtensible Markup Language),用户自定义的标签.相对于HTML来说的。
二、XML被设计的宗旨是表示数据。HTML是用来显示数据的。目前常用的XML版本是1.0
三、XML除了表示数据外。在实际的企业开发中,主要用XML做为程序的配置文件。
2、XML的基本语法(组成)
一、文档声明:
做用:用于标识该文档是一个XML文档。
注意事项:声明必须出如今文档的第一行(以前连空行/空格都不能有,也不能有任何的注释)
最简单的XML声明:<?xml version="1.0"?>
声明中的encoding属性:说明解析当前XML文档时所使用的编码。默认是UTF-8
声明中的standalone属性:说明XML文档是不是独立而不依赖其余文档。(了解)
二、元素:
XML中出现的标签,分为包含标签主体和不包含标签主体,如:<p>哈哈</p> <h/>
一个标签能够嵌套若干标签,可是不容许交叉嵌套,必须合理嵌套
结束标签不能省略
一个XML文档必须且只能有一个根标签,其余标签都是该标签的子标签或孙标签
XML文档中不会忽略回车和换行及空格
标签的命名规范:元素(标签)的名称只能以字母或下划线开头,
能够包含字母、数字、减号、下划线和英文句点。严格区分大小写。
三、元素的属性
元素的属性取值必定要用引号引发来(单引号或双引号)
标签属性所表明的信息也能够被改为用子元素的形式来描述,方便细度编程
四、注释
与HTML中的注释彻底一致:<!--这是注释-->
注释不能嵌套javascript
五、CDATA区
CDATA是Character Data的缩写。
做用:CDATA区中的东东都是文本。
语法:
<![CDATA[
文本内容
]]>
六、特殊字符
& &
< < (less than)
> >:(great than)
" "
' '
七、处理指令(PI:Processing Instruction)
处理指令,简称PI(Processing Instruction)。
做用:用来指挥软件如何解析XML文档。
语法:必须以“<?”做为开头,以“?>”做为结尾。
xml-stylesheet指令: 指示xml文档所使用的CSS样式或XSL, 注: 对中文命名的标签元素不起做用
如: <?xml-stylesheet type="text/css" href="a.css"?>
3、XML的约束
一、格式良好的XML文档:符合XML语法的。
二、有效的XML文档:遵循约束规范的。
格式良好的不必定是有效的,但有效的一定格式良好。
三、经常使用的约束技术: XML DTD 和 XML Schema
4、DTD的基本语法(看懂便可)
一、DTD:Document Type Definition
二、做用:约束XML的书写规范。
三、DTD文件保存到磁盘时,必须使用UTF-8编码
四、如何引入外部的DTD文档来约束当前的XML文档
DTD文件在本地:<!DOCTYPE 根元素名称 SYSTEM "DTD文件的路径">
如: <!DOCTYPE 书架 SYSTEM "book.dtd">
DTD文件在网络上:<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD的路径URL">
如: <!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
5、DTD的语法细节
5.1定义元素
语法:<!ELEMENT 元素名称 使用规则>
使用规则:
(#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
EMPTY:指示元素的不能有主体内容。
ANY:用于指示元素的主体内容为任意类型
(子元素):指示元素中包含的子元素
若是子元素用逗号分开,说明必须按照声明顺序去编写XML文档
若是子元素用“|”分开,说明任选其一。
用+(>=1)、*(>=0)、?(0/1)来表示元素出现的次数,若是都没有,则只能且必须出现一次
5.2定义元素的属性(attribute)
语法:
<!ATTLIST 哪一个元素的属性
属性名1 属性值类型 设置说明
属性名2 属性值类型 设置说明>
属性值类型:
CDATA:说明该属性的取值为一个普通文本
ENUMERATED (DTD没有此关键字):
语法:<!ATTLIST 元素名称 (值1|值2) "值1">
ID:属性的取值不能重复
设置说明:
#REQUIRED:表示该属性必须出现
#IMPLIED:属性无关紧要
#FIXED:表示属性的取值为一个固定值 语法:#FIXED "固定值"
直接值:表示属性的取值为该默认值
5.3定义实体(了解)
关键字ENTITY
实体的定义分为引用实体和参数实体
引用实体:
做用:在DTD中定义,在XML中使用
语法:<!ENTITY 实体名称 "实体内容">
在XML中使用:&实体名称;
例:
<!ENTITY copyright "你好啊">
©right;
参数实体:
做用:在DTD中定义,在DTD中使用
语法:<!ENTITY % 实体名称 "实体内容">
在DTD中使用:%实体名称;
例:
<!ENTITY % TAG_NAMES "姓名|EMAL|电话|地址">
<!ELEMENT 我的信息 (%TAG_NAMES;|生日)>
例子: book.dtd文件
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,做者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 做者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
<!ATTLIST 书
ISBN ID #REQUIRED
出版社 (上海传智|北京传智) "上海传智">
<!ENTITY wzt "王昭珽">
根据book.dtd约束规范写出的book.xml文档
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书 ISBN="a" 出版社="北京传智">
<书名>Java就业培训教程</书名>
<做者>&wzt;</做者>
<售价>39.00元</售价>
</书>
<书 ISBN="b">
<书名>JavaScript网页开发</书名>
<做者>&wzt;</做者>
<售价>28.00元</售价>
</书>
</书架>
6、根据DTD可否对XML文档进行约束模式校验,能够将解析器分为俩类:
非校验解析器: 如IE
校验解析器: 建立一个html文本,拷贝以下代码,并导入要校验的xml文档便可
代码以下:
<script type="text/javascript">
// 建立XML文档解析器对象
var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
// 开启XML校验
xmldoc.validateOnParse="true";
// 装载要检验的XML文档
xmldoc.load("instance1.xml");
// 获取错误信息
var reson = xmldoc.parseError.reason;
// 获取错误的行号
var line = xmldoc.parseError.line;
document.write(reson+"<br/>");
document.write(line);
</script>
7、XML解析方式概述
一、经常使用XML的解析方式:DOM和SAX
DOM:Document Object Model是W3C推荐使用的解析方式
SAX:Simple API for XML。非官方标准。
二、经常使用解析开发包:
JAXP:SUN推出的实现,能进行DOM和SAX方式解析
Dom4J
JDom等css
8、XML的编码问题html