深入解读XML解析

一、XML是什么?有什么用?

 

XML是指可扩展标记语言(eXtensible MarkupLanguage),它是一种标记语言。它被设计的宗旨是描述数据(XML),而非显示数据(HTML)。

目前遵循的是W3C组织于2000年发布的XML1.0规范

二、XML的基本语法

 

 

1、文档声明:很重要

 

在编写XML文档时,需要先使用文档声明来声明XML文档。且必须出现在文档的第一行。

作用:告知解析器,我是一个XML文档。

 

最简单的声明语法:

<?xml version="1.0"?>     中间不要加空格,后面加?号

当我们写好的一个xml文件写入内存的时候会转换为二进制保存,这个时候会查码表,记事本保存的时候是gbk,而保存的时候默认查码表时用的是utf-8,

这个时候我们就可以用encoding属性:默认是UTF-8    <?xml version="1.0" encoding="GBK"?>,这样就可以解决乱码等问题。

standlone属性:该xml文件是否独立存在。

2、元素(标签)

XML语法非常严格。不能够省略结束标签。

一个XML文档必须有且仅有一个根标签

XML中不会忽略主体内容中出现的空格和换行

元素(标签)的名称可以包含字母、数字、减号、下划线和英文句点,但必须遵守下面的一些规范:

l  严格区分大小写;<P> <p>

l  只能以字母或下划线开头;abc _abc

l  不能以xml(或XML、Xml等)开头----W3C保留日后使用;

l  名称字符之间不能有空格或制表符;ab

l  名称字符之间不能使用冒号; (有特殊用途)   

 

3、元素的属性

属性值一定要用引号(单引号或双引号)引起来

 元素中属性不允许重复

4、注释

XML中的注释语法为:<!--这是注释-->

XML声明之前不能有注释       不允许第一行写注释(不同于java)

5、CDATA区

Character Data:字符数据。

语法:

<![CDATA[

内容

]]>

作用:

被CDATA包围的内容,都是普通的文本字符串。

 

6、特殊字符

特殊字符       替代符号

&                    &amp

<                  &lt

>                  &gt

"                    &quot

'                     &apos

 

三、XML的约束

 

XML可以自定义。如果作为配置文件。

 

格式良好的XML文档:遵循XML语法的。

有效的XML文档:遵守约束的XML文档。

有效的XML文档必定是格式良好的,但良好的不一定是有效的。

 

1、DTD约束:(能看懂DTD即可)

a、DTD(Document Type Definition):文档类型定义

作用:约束XML的书写规范

 

注意:dtd可以写在单独的文件中,扩展名是dtd,且必须使用UTF-8编码进行保存。

 

b、XML文档中如何导入DTD约束文档(XML外部)

l  dtd文档在本地:

<!DOCTYPE 根元素 SYSTEM "dtd文件的路径">

l  dtd文档在网络上:

<!DOCTYPE 根元素 PUBLIC "dtd名称" "DTD文档的URL链接地址">

 

 

四、利用Java代码解析XML文档

1、解析方式

l  DOM:Document Object Model,文档对象模型。这种方式是W3C推荐的处理XML的一种标准方式。

缺点:必须读取整个XML文档,才能构建DOM模型,如果XML文档过大,造成资源的浪费。

优点:适合对XML中的数据进行操作(CRUD)。

l  SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-DEV,几乎所有的XML解析器都支持它。

 

2、解析工具

JAXP:

DOM或SAX方式进行解析XML。API在JDK之中。

Dom4J:(推荐)

是开源组织推出的解析开发包。(牛,大家都在用,包括SUN公司的一些技术的实现都在用)

五、JAXP进行DOM方式解析XML基本练习

1、JAXP简介:

开发包:(JDK中)

DOM:W3C。org.w3c.dom.*   DOM规范。(接口/抽象类)

SAX:开源组织。org.xml.sax.*  SAX规范。(接口/抽象类)

JAXP:javax.xml.* 

sax解析原理

在使用 DOM 解析 XML 文档时,需要读取整个 XML 文档,在内存中构架代表整个 DOM 树的Doucment对象,从而再对XML文档进行操作。此种情况下,如果 XML 文档特别大,就会消耗计算机的大量内存,并且容易导致内存溢出。

SAX解析允许在读取文档的时候,即对文档进行处理,而不必等到整个文档装载完才会文档进行操作。


SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器: 解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档。 解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。 事件处理器由程序员编写,程序员通过事件处理器中方法的参数,就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理

基本解析操作

    //1解析器
    SAXParser parse = SAXParserFactory.newInstance().newSAXParser();
    //2获取xml读取器
    XMLReader reader = parse.getXMLReader();
    //3注册内容处理器
    reader.setContentHandler(new ContentHandler1());
    //4读取xml文档
    reader.parse("src/book.xml");

 

posted @ 2018-04-17 16:16  H丶  阅读(303)  评论(0编辑  收藏  举报