java中如何使用sax解析xml

  介绍

小编给大家分享一下java中如何使用sax解析xml,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

在java中,原生解析xml文档的方式有两种,分别是:Dom解析和sax解析

Dom解析功能强大,可增删改查,操作时会将xml文档以文档对象的方式读取到内存中,因此适用于小文档

sax解析是从头到尾逐行逐个元素读取内容,修改较为不便,但适用于只读的大文档

本文主要讲解sax解析,其余放在后面

sax采用事件驱动的方式解析文档。简单点说,如同在电影院看电影一样,从头到尾看一遍就完的了,不能回退(Dom可来来回回读取)

在看电影的过程中,每遇到一个情节,一段泪水,一次擦肩,你都会调动大脑和神经去接收或处理这些信息

同样,在sax的解析过程中,读取到文档开头,结尾,元素的开头和结尾都会触发一些回调方法,你可以在这些回调方法中进行相应事件处理

这四个方法是:startDocument (), endDocument (), startElement ()、endElement

此外,光读取到节点处是不够的,我们还需要字符()方法来仔细处理元素内包含的内容

将这些回调方法集合起来,便形成了一个类,这个类也就是我们需要的触发器

一般从主方法中读取文档,却在触发器中处理文档,这就是所谓的事件驱动解析方法

癹ava中如何使用sax解析xml”

如上图,在触发器中,首先开始读取文档,然后开始逐个解析元素,每个元素中的内容会返回到字符()方法

接着结束元素读取,所有元素读取完后,结束文档解析

现在我们开始创建触发器这个类,要创建这个类首先需要继承DefaultHandler

创建SaxHandler,并覆写相应方法:

进口org.xml.sax.Attributes;   进口org.xml.sax.SAXException;   进口org.xml.sax.helpers.DefaultHandler;         公开课SaxHandler扩展DefaultHandler {/*此方法有三个参数   arg0是传回来的字符数组,其包含元素内容   __arg1和最长分别是数组的开始位置和结束位置*/@Override   公共空白字符(char [] arg0, int __arg1、int最长)抛出SAXException {   字符串内容=新的字符串(__arg1 arg0,最长);   System.out.println(内容);   超级。字符(arg0, __arg1、最长);   }      @Override   公共空间endDocument()抛出SAXException {   System.out.println (“\ n…………结束解析文档…………“);   super.endDocument ();   }/* arg0是名称空间   __arg1是包含名称空间的标签,如果没有名称空间,则为空   最长是不包含名称空间的标签*/@Override   公共空间endElement (__arg1 arg0的字符串,字符串,字符串最长)   抛出SAXException {   System.out.println(“结束解析元素,+最长);   超级。endElement (__arg1 arg0,最长);   }      @Override   公共空间startDocument()抛出SAXException {   System.out.println(“…………开始解析文档…………\ n");   super.startDocument ();   }/* arg0是名称空间   __arg1是包含名称空间的标签,如果没有名称空间,则为空   最长是不包含名称空间的标签   长度很明显是属性的集合*/@Override   公共空间startElement (__arg1 arg0的字符串,字符串,字符串最长,   属性长度)抛出SAXException {   System.out.println(“开始解析元素,+最长);   如果(长度!=null) {   for (int i=0;我& lt;arg3.getLength ();我+ +){//getQName()是获取属性名称,   System.out.print (arg3.getQName(我)+“=\”;“+ arg3.getValue (i) +“\““);   }   }   system . out。打印(最长+“:“);   超级。__arg1 startElement (arg0,最长长度);   }   }

XML文档:

& lt; ?xml version=?.0”;编码=癠TF-8" ?比;   & lt; books>   & lt;书id=?01“比;   & lt; title>哈利Potter   & lt; author> J k Rowling   & lt;/book>   & lt;书id=?02“比;   & lt; title>学习XML   & lt; author>埃里克·t·Ray   & lt;/book>   & lt;/books>

TestDemo测试类:

进口java.io.File;      进口javax.xml.parsers.SAXParser;   进口javax.xml.parsers.SAXParserFactory;         公开课TestDemo {      公共静态void main (String [] args){抛出异常//1 .实例化SAXParserFactory对象   SAXParserFactory工厂=SAXParserFactory.newInstance ();//2 .创建解析器   SAXParser解析器=factory.newSAXParser ();//3 .获取需要解析的文档,生成解析器,最后解析文档   文件f=新文件(“books.xml");   SaxHandler dh=new SaxHandler ();   解析器。解析(f, dh);   }   }

java中如何使用sax解析xml