XML和Servlet
当今广泛使用的标记语言是超文本语言HTML和可扩展标记语言XML,标记语言广泛应用于网页和网络应用程序。
[if !supportLists]1、 [endif]超文本标记语言HTML
关注数据的展示与用户的体验,标记是预定义、不可扩展的;
[if !supportLists]2、 [endif]可扩展的标记语言XML
写法格式同html样式,仅关注数据本身,标记可扩展可自定义;
注意:html和xml语言由一种父语言SGML标准通用标记语言发展出来的、
Xml有html发展而来,但是比html更严格XML 描述的是结构、内
容和语义,它不描述页面元素的格式化。HTML 侧重于如何表现信息,内容描述与显示整合为一体。XML 中的每个元素名都是成对出现的,结束标签前加一个/。
Xml的作用
用于描述数据、存储数据、传输交换数据。它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便,用户可以定义自己需要的标记;
[if !supportLists]1、 [endif]存储、交换数据
XML 只用元素和属性来描述数据,而不提供数据的显示方法。
用 XML 在应用程序和公司之间作数据交换,几个应用程序可以共享和解析同一个 XML 文件,不必使用传统的字符串解析或拆解过程。
[if !supportLists]2、 [endif]配置
xml 比数据库占用的资源少,操作方便,用来存储简单的信息,现在主
要用在程序的配置文件上(比如web.xml)。现在有越来越多的设备也支持 XML 了。
Xml示例
方式1
<?xml version="1.0"
encoding="UTF-8"?>
<people>
<person>
<name>白晶晶</name>
<age>28</age>
</person>
<person>
<name>至尊宝</name>
<age>300</age>
</person>
</people>
方式2
<?xml version="1.0"
encoding="UTF-8"?>
<people>
<person name=" 白晶晶 "
age="28"></person>
<person name=" 至尊宝 "
age="300"></person>
</people>
语法规范
[if !supportLists]1、 [endif]必须要有xml文档声明
<?xml version="1.0"?>
<?xml version="1.0"
encoding="UTF-8"?>
<?xml version="1.0"
standalone="yes"?>
<?xml version="1.0"
encoding="UTF-8" standalone="yes" ?>
Xml 表示这是一份xml文件。
Version 用来指定xml的版本,默认是”1.0”。
Standalone 表示该xml是不是独立的,如果是“yes”则表示文档独立,不能引用外部,如果是“no”则该xml文档不是独立的,
encoding 指定文件所使用的字集编码,默认“UTF-8”
?> 声明结束字符
注意:文本文件保存时候默认的编码格式是ANSI,需用记事本把它手动改为UTF-8保存。
[if !supportLists]2、 [endif]必须有一个根元素
[if !supportLists]3、 [endif]严格区分大小写
[if !supportLists]4、 [endif]属性值用引号(双引号或单引号):等号分开的名称-值对;在一个元素上,相同的属性只能出现一次。
[if !supportLists]5、 [endif]标记成对
[if !supportLists]6、 [endif]空标记关闭
[if !supportLists]7、 [endif]元素正确嵌套
实体
实体叫 ENTITY,实体的作用是避免重复输入。作用相当于宏或者变量。
内置的5种实体
实体 符号
< <
> >
& &
"
"
' '
自定义实体
<!DOCTYPE 根元素[
<!--实体声明-->
<!ENTITY 实体名 "实体内容">
]>
使用已定义的实体:
<?xml
version="1.0" encoding="UTF-8"?>
<!DOCTYPE
sxt[
<!--实体声明-->
<!ENTITY xm
" 明明 ">
<!ENTITY gen
" 保密 ">
]>
<sxt>
<teacher>
<name>明明</name>
<gender>保密</gender>
</teacher>
<!--引用实体的方法-->
<teacher>
<name>&xm;</name>
<gender>&gen;</gender>
</teacher>
</sxt>
文档类型声明
文档类型定义——DOCTYPE,文档类型声明,紧跟 XML 声明之后,包含所有实体声明。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 根元素标记名[
<!--实体声明-->
]>
组成
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
元素
属性
实体
PCDATA
CDATA
CDATA 节(character data)
[if !supportLists]1、 [endif]CDATA
用于把整段文本解释为纯字符数据而不是标记的情况。如包含大量的<、>、&、或者"字符。CDATA 节中的所有字符都会被当做元素字符数据的常量部分,而不是 XML 标记,可以输入除]]>外任意字符,不能嵌套。
[if !supportLists]2、 [endif]PCDATA
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。文本中的标签会被当作标记来处理,而实体会被展开。
不过,被解析的字符数据不应当包含任何&、< 或者 > 字符;需要使用 &、< 以及 >的内置实体来分别替换它们。
XML解析
基本的解析方式有两种:一种叫 SAX,另一种叫 DOM。SAX(Simple API for XML)是基于事件流的解析,DOM(Document Object Model)是基于 XML 文档树结构的解析。SAX:效率高,数据量小,仅一次获取,DOM:整颗树加载到内存中,耗内存,可多次获取。
核心操作接口
在 DOM 解析中有以下四个核心的操作接口
Document : 此接口代表了整个 XML 文档,表示的是整棵 DOM 树的根,提供了对文
档中的数据进行访问和操作的入口,通过 Document 节点可以访问 XML 文件中所有的
元素内容。
Node : 此接口在整个 DOM 树种具有举足轻重的低位,DOM 操作的核心接口中有很大
一部分接口是从 Node 接口继承过来的。例如:Document、Element 等接口,在 DOM树种,每一个 Node 接口代表了 DOM 树种的一个节点。
NodeList : 此接口表示的是一个节点的集合,一般用于表示有顺序关系的一组节点,
例如:一个节点的子节点,当文档改变的时候会直接影响到 NodeList 集合。
NamedNodeMap : 此接口表示的是一组节点和其唯一名字对应的一一对应关系,本
接口主要用于属性节点的表示上。
DOM解析过程
[if !supportLists]1) [endif]建立DocumentBuilderFactory:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
[if !supportLists]2) [endif]建立CoucumentBuilder:
DocumentBuilder builder = factory.newDoucumentBuilder();
[if !supportLists]3) [endif]建立Document:
Document doc = builder.parse(“要解析的文件路径”);
[if !supportLists]4) [endif]建立NodeList:
NodeList nl = doc.getElementsByTagName(“读取节点”);
[if !supportLists]5) [endif]进行xml信息读取
SAX解析
SAX(Simple API
for XML,操作 XML 的简单接口),与 DOM 操作不同的是,SAX 采用的
是一种顺序的模式进行访问,是一种快速读取 XML 数据的方式。当使用 SAX 解析器进行操作的时候会触发一系列的事情,当扫描到文档(document)开始与结束、元素
(element)开始与结束时都会调用相关的处理方法,并由这些操作方法作出相应的操
作,直至整个文档扫描结束。如果要想实现这种 SAX 解析,则肯定首先建立一个 SAX 的解析器
// 1、创建解析器工厂
SAXParserFactory
factory = SAXParserFactory.newInstance();
// 2、获得解析器
SAXParser parser
= factory.newSAXParser();
// SAX解析器,继承 DefaultHandler
String path =
new File("resource/demo01.xml").getAbsolutePath();
// 解析
parser.parse(path,
new MySaxHandler());
DOM4j解析
dom4j 是一个简单的开源库,用于处理 XML、 XPath 和 XSLT,它基于 Java 平台,使
用 Java 的集合框架,全面集成了 DOM,SAX 和 JAXP。下载路径:
http://www.dom4j.org/dom4j-1.6.1/
http://sourceforge.net/projects/dom4j
可以使用 DOM4J 进行 XML 文件的读、写操作
DOM4J 与 JDOM 一样都属于一个免费的 XML 开源组建,但是由于现在的开发框架中使用该技术较多,比如 Hibernate、Spring 等都使用 DOM4J 这个功能
JDOM 解析
掌握 JDOM 开发工具的使用及产生原理
可以使用 JDOM 进行读取或写入的操作
在 W3C 本身提供的 XML 操作标准,DOM 和 SAX,但是从开发角度上看,DOM 和 SAX
本身是各有特点的,DOM 可以修改,但不适合读取大文件,而SAX 可以读取大文件,
但是本身不能修改
所谓的 JDOM = DOM 的可修改 + SAX 的读取大文件
JDOM主要操作的类
Document 定义了一个xml文件的各种操作,用户可以通过它所提供的方法来存取根元素以及存取处理命令文件层次的相关信息;
DOMBuilder 用来建立一个JDOM结构树;
Element 定义了一个xml元素的各种操作,用户可以通过它所提供的方法得到元
素的文字内容、属性值以及子节点;
Attribute 该类表示了xml文件元素中属性的各个操作;
XMLOutputter 该类将一个JDOM结构树格式化为一个XML文件,并且以输出流的方式加以输出。