2019-06-05

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种实体

实体 符号

&lt; <

&gt; >

&amp; &

&quot;

"

&apos; '


自定义实体

<!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文件,并且以输出流的方式加以输出。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,610评论 1 45
  • 1. XML总结 1.1. XML简介 XML : 可扩展的标记语言。(和HTML非常类似的) 可扩展的。 自定义...
    Ethan_Walker阅读 3,100评论 0 12
  • 控制感是人们务必要应对的所有心理变量中,决定人们能否快乐,健康,成功生活的基本元素之一。 人们在失去控制感之后会迅...
    BravoNice阅读 342评论 0 0
  • 功 课 高尚笑 王老师是八十年代末在师范学校毕业的。 自从毕业之后,就被分配...
    高尚笑阅读 474评论 0 4
  • 一个人如果谎言不断,不尊重承诺,如果不能在他身上得到利益,那还有多少人和他交往呢。 一个人代表一个公司,表现出不诚...
    牛仔_cf39阅读 165评论 0 0