XML (eXtensible Markup Language,可扩展标记语言)。XML技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发布的XML1.0规范。2001年12月13日,XML 1.1作为一份工作草案被发布,并作为一项候选推荐发布于2002年10月15日。
XML特点:
1.XML的设计目标是描述数据并集中于数据的内容(如 数据之间的结构关系(如图1))。(而HTML设计目标是显示数据并集中于数据外观) 2.XML专门为WEB应用而设计,标记可以自定义。 3.<student> <address>...
4.XML具有错误验证机制。 5.XML区分大小写。 6.XML标记的属性必须用“”或’’括起来。
XML的第一个例子:
<?xml version="1.0" encoding="UTF-8"?><中国> <北京> <海淀></海淀> <丰台></丰台> </北京> <湖南> <长沙></长沙> <岳阳></岳阳> </湖南> <湖北> <武汉></武汉> <荆州></荆州> </湖北></中国>HTML(Hypertext Markup Language,超文本标记语言)。
1.HTML的设计目标是显示数据并集中于数据外观。 2.标记是预定义的。 3.<table> <tr> <td>...
4.HTML是松散的,它允许错误的存在。这就是为什么现在我们用不同的浏览器浏览同一个网站时表现效果会有差异。 5.HTML不区分大小写。 6HTML标记的属性可用也可不用”“括起来。
优点:使用简单,适合Web传输。 缺点:语法不严谨,标记不可扩展,结构松散!
在HTML语言里面以上情况都是允许出现的,语法很不严谨!XML集合 HTML的优点并消除其缺点。既能利用标准通用标记语言的长处,又保留html的简单性。
1.数据描述,作为软件配置文件 2.存储数据,作为小型的数据库
<?xml version="1.0" encoding="GBK" standalone="yes"?>
大多数XML文档以XML声明作为开始,它向解析器提供了关于文档的基本信息。 建议使用XML声明,但不是必需的。如果有的话,那么它一定是文档的第一行内容。声明最多可以包含三个名称-值对。
A: version :表示使用的 XML 版本:1.0,1.1
B: encoding :表示该文档所使用的字符集。 该声明中引用的 ISO-8859-1 字符集包括大多数西欧语言用到的所有字符。 如没有指定 encoding,XML 解析器会假定字符在 UTF-8 字符集中,这是一个几乎支持世界上所有语言的字符和象形文字的 Unicode 标准。
C: standalone: 值可以是 yes 或 no。定义了是否可以在不读取任何其它文件的情况下处理该文档。 如果XML文档没有引用任何其它文件,则可以指定 standalone=”yes”。 如果XML文档引用其它描述该文档可以包含什么的文件, 则可以指定 standalone=“no”。缺省值为 standalone=”no”
XML注释的格式:<!-- 注释内容 -->
注意事项: 1.注释可以出现在文档的任何位置,除了在XML声明之前; 2.注释不能在结束部分以外包含双连字符(- -); 3.注释内的任何标记都被忽略; 4.注释不能嵌套,如:
<!--大段注释 …… <!--局部注释--> ……-->标记:左尖括号(<)和右尖括号(>)之间文本,分为开始标签如:<student>
和结束标签</student>
。
元素:是指开始标签、结束标签以及位于二者之间的所有内容。
属性:一个元素开始标签中的名称-值对。
<address><!-- 这是开始的标记 --> <name> <title>Mrs.</title> <first-name>Eric</first-name><!-- 这是一个元素 --> <last-name>Xu</last-name> </name> <street>TianHe TangXia</street> <city state="gz">GuangZhou</city><!-- state="gz"这是一个属性 --> <post-code>510100</post-code></address> <!-- 这是结束的标记 -->注意事项:
a) 标记必须遵循以下命名规则 1.区分大小写,例如,<P>
和<p>
是两个不同的标签。 2.不能以数字或”_” (下划线)开头。 3.不能以xml(或XML、或Xml 等)开头。 4.不能包含空格。 5.名称中间不能包含冒号(:)。
b) 如果一个元素根本不包含标记之间的内容,称为空元素。例如:<br></br>
, <img></img>
。在空元素中,可以把结束斜杠放在开始标记中。例如,下面的两个换行元素和两个图像元素对于XML解析器来说是一回事:
c) 良好的XML文档中,根元素必须唯一。其他元素都是这个根元素的子孙元素。例如,
d) 元素之间必须正确嵌套。一个元素中也可以嵌套若干子元素。但所有元素必须合理的嵌套,绝对不允许交叉嵌套的情况出现。例如,
e) 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如:下面两段内容的意义是不一样的。
由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。
f) 属性必须有用引号括起的值。例如,
处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
一条处理指令包含一个目标,后跟数据。
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用CSS文件显示xml文档内容。
处理指令必须以“
文件清单:person.xml<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/css" href="person.css"?><person-list> <!-- 联系人信息 --> <person id="001"> <!-- 联系人姓名 --> <name>张三</name> <gender>男</gender> <phone>1380000000</phone> <email>zhangsan@126.com</email> <QQ>88888888</qq> </person></person-list>文件清单:person.css*{ font-size:30px; color:red;}效果:
对于一些单个字符,若想显示其原始样式,也可以使用转义的形式予以处理。
在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理。 遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。
语法:
<![CDATA[ <itcast> <br/> </itcast> ]]><?xml version="1.0" encoding="UTF-8"?><script> <![CDATA[ function match(a , b){ if(a<b){ return 1; }else{ return 0; } } ]]></script>两个重要的问题:
1) 什么是良好的XML? 答:符合W3C制定的语法规范(也就是上面所提到的所有XML语法),我们就说这个XML是良好的XML。
2)什么是有效的XML? 答:通过了用户自定义的DTD或者Schema校验的约束规则,我们就说这个XML是有效的XML。
文档类型定义(Document Type Definition,简称DTD)。
DTD定义了XML文档内容的结构,保证XML以一致的格式存储数据。 XML允许用户为应用程序创建自己的DTD。 通过DTD定义的词汇表以及文档语法,XML解析器可以检查XML文档内容的有效性。
文件清单:student.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE 班级 SYSTEM "student.dtd"><班级> <学生> <姓名>郭靖</姓名> <性别>男</性别> <年龄>25</年龄> </学生> <学生> <姓名>黄蓉</姓名> <性别>女</性别> <年龄>20</年龄> </学生>文件清单:student.dtd<!Element 班级 (学生+)><!Element 学生 (姓名,性别,年龄)><!Element 姓名 (#PCDATA)><!Element 性别 (#PCDATA)><!Element 年龄 (#PCDATA)>DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。
文件内部编写:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE 班级 [ <!ELEMENT 班级 (学生+)> <!ELEMENT 学生 (姓名,性别,年龄)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 性别 (#PCDATA)> <!ELEMENT 年龄 (#PCDATA)>]><班级> <学生> <姓名>梅超风</姓名> <性别>女</性别> <年龄>40</年龄> </学生> ...</班级>外部引用: XML文件使用 DOCTYPE 声明语句来指明它所遵循的DTD文件,DOCTYPE声明语句有两种形式: 当引用的文件在本地时,采用如下方式: <!DOCTYPE 文档根结点 SYSTEM "DTD文件的URL">
例如: 。在xml文件中手写一下。
当引用的文件是一个公共的文件时,采用如下方式: <!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
例如: “-//Sun Microsystems, Inc.//DTD Web application 2.3//EN” “http://java.sun.com/dtd/web-app_2_3.dtd”>
元素格式: 在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下所示: <!ELEMENT 元素名称 元素类型>
元素类型分类: EMPTY(空元素):
元素不能包含任何数据,但可以有属性(前提是必须声明其属性)。 不能有子元素。 不能有文本数据(包括空白)。
DTD定义:<!Element 学生 EMPTY>有效的XML内容:<学生></学生> 或者<学生/> (推荐使用)---------------------------------------------------无效的XML内容:<学生> </学生> (有空格!) <学生>张三</学生> (有文本!)<学生> <姓名>郭靖</姓名> (有子元素!)</学生 >#PCDATA
(只有PCDATA的元素): PCDATA,指会被解析器解析的文本,通常指字符串内容。不包含任何类型的子元素内容。
ANY(带有任何内容的元素): 元素可以包含任何类型的数据。 子元素(必须在DTD中有定义) 文本数据(包括空白)
DTD定义:<!Element 宇宙 ANY><!Element 银河系 (#PCDATA)>有效的XML内容:<宇宙></宇宙> <宇宙>整个宇宙是无穷大的</宇宙> <宇宙> <银河系>银河系一号</银河系></宇宙>--------------------------------无效的XML内容:<宇宙> <银河系>银河系一号</银河系> <地球></地球></宇宙>带有子元素的元素。而子元素出现的顺序和数目是可以指定的。参考下表:
项目 书写语法 描述 顺序出现
直接使用默认值 直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
属性值类型 CDATA CDATA:表示属性值为普通文本字符串。CDATA是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。 ENUMERATED 属性的类型可以是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值(枚举)。注意,关键字ENUMERATED是不出现在DTD定义中的。
ID 表示属性的设置值为一个唯一值。属性的值只能由字母,下划线开始,不能出现空白字符。
4 XML解析方式概述 4.1 DOM(文档对象模式) DOM(全称叫Document Object Model)基于树或基于对象的XML处理模式。
XML 文档具有一个称为节点的信息单元层次结构; DOM 是描述那些节点和节点间关系的方式。 DOM 是万维网联盟(W3C)维护处理XML的标准。 DOM是平台无关语言无关的。
DOM处理原理:
4.2 SAX(事件处理模式) SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器: 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。
SAX处理原理
4.3 DOM与SAX的区别 * DOM和SAX解析模式的区别?(经典面试题)***
SAX DOM 依序读入文件并产生相对应事件,可以处理任何大小的XML文件。 在内存中建立文件树,不适于处理大型的XML文件。 只能对文件按顺序剖析一遍,不支持对文件的随意存取 可以随意存取文件树的任何部分,没有次数限制 通常只去能读取XML文件内容,修改起来很麻烦 可以随意修改文件树,从而修改了XML文件 开发上比较复杂,需要自己来制作事件处理器 易于理解,易于开发 对工作人员更灵活,可以用SAX建立自己的XML对象模型 已经在DOM基础之上建立了文件树
基于SAX(事件的处理)的优点和缺点
优点:这种处理的优点非常类似于流媒体的优点。分析能够立即开始,而不是等待所有的数据被处理。而且,由于应用程序只是在读取数据时检查数据,因此不需 要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。 缺点:由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。
基于DOM(树)的处理的优点和缺点
优点: 1)由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。 2)它可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。 3)DOM 使用起来也要简单得多。 缺点: 1)在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。 2)创建一棵DOM树可能是一个缓慢的过程。 4.4 常用的XML解析器 1)JAXP 2)DOM4J 3)JDOM
5 Dom4j基本使用 5.1 DOM4J概述 Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。 Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。 使用Dom4j开发,需下载dom4j相应的jar文件。(http://www.dom4j.org/download.html) 5.2 DOM4J核心接口解读 DOM4J主要接口都在org.dom4j这个包里定义。
-Node为所有的dom4j中XML节点定义了多态行为;
-Branch为能够包含子节点的节点如XML元素(Element)和文档(Document)定义了一个公共的行为; |-Element 定义XML 元素; |-Document定义了XML文档;
-DocumentType 定义XML DOCTYPE声明; -Entity定义 XML entity; -Attribute定义了XML的属性; -ProcessingInstruction 定义 XML 处理指令;
-CharacterData是一个标识接口,标识基于字符的节点。如CDATA,Comment, Text; |- CDATA 定义了XML CDATA 区域; |-Text 定义XML 文本节点; |- Comment 定义了XML注释的行为;
5.3 CRUD案例
读取节点信息 1)读取所有元素信息
2)读取指定元素内容
3)读取属性 添加节点信息 修改节点信息 删除节点信息
新闻热点
疑难解答