xml一种格式严谨,通用,表述数据良好的语言,它有存储数据的功能,这一点和数据库相似.
dom和sax是两种不同的解析xml文件的机制.在解析大型xml文件时,宜选用sax技术.
下面以判断users.xml文件中,是否存在id 为"003"的用户为例,简要介绍一下sax技术.
首先准备一个xml文件.usrs.xml 代码如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <users>
- <user id="001">
- <username>james</username>
- <password>james</password>
- </user>
- <user id="002">
- <username>adu</username>
- <password>adu</password>
- </user>
- <user id="003">
- <username>root</username>
- <password>root</password>
- </user><user id="004">
- <username>lishanli</username>
- <password>lishanli</password>
- </user>
- </users>
创建IsExistedUserHandler类,它派生自DefaultHandler.代码如下:
- package org.james.sax.util;
- import org.xml.sax.Attributes;
- import org.xml.sax.SAXException;
- import org.xml.sax.helpers.DefaultHandler;
- public class IsExistedUserHandler extends DefaultHandler {
- private String id;
- public IsExistedUserHandler(String id){
- this.id=id;
- }
- @Override
- public void startElement(String url, String localName, String qName,
- Attributes atts) throws SAXException {
- if(atts!=null){
- String userID=atts.getValue("id");
- if(userID!=null){
- if(userID.equals(id)){//当解析到id属性与构造函数中的id一样时,说明,存在该用户.
- throw new SAXException("己经存在该用户!");//由于,sax在解析过程中不能停止,此时却需要停止,可以采用/抛出异常的方式,终止解析.
- }
- }
- }
- }
- }
好了,现在写一个测试类,测试一下吧
- package org.james.sax;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.parsers.SAXParser;
- import javax.xml.parsers.SAXParserFactory;
- import org.james.sax.util.IsExistedUserHandler;
- import org.xml.sax.SAXException;
- public class UserService {
- private static InputStream IN =UserService.class.getClassLoader().getResourceAsStream("users.xml");
- private SAXParser saxParser;
- public UserService(){
- try {
- saxParser=SAXParserFactory.newInstance().newSAXParser();
- } catch (ParserConfigurationException e) {
- e.printStackTrace();
- } catch (SAXException e) {
- e.printStackTrace();
- }
- }
- public boolean isExistedUser(String id){
- IsExistedUserHandler ieuh=new IsExistedUserHandler (id);
- try {
- saxParser.parse(IN, ieuh);
- } catch (SAXException e) {
- System.out.println(e.getMessage());
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- }
- return false;
- }
- public static void main(String... args){
- UserService us=new UserService();
- System.out.println(us.isExistedUser("003"));
- }
- }
看看控制台输出什么?
-------------------------------
己经存在该用户!
true
--------------------
哈哈,说明成功了!