韩顺平XML学习5

sax技术

单说面试题说请下下面的代码会出现什么问题?

byte bytes[]=new byte[1024*1024*1000];

bytes[0]=0;

System.out.println(bytes[0]);

实际考察你会不会 指定 jvm启动的 内存大小:

答: jvm机启动时有一个默认大小 jdk5.0  64m, 如果我们希望改变jvm机启动的内存大小可以通过修改 –Xmx?m 来处理 ?可以自己指定

 

1.为什么会出现sax技术

因为dom技术,会把整个xml文件加载到内存中,这样如果   xml过大,则可能会出现内存溢出.

1. sax技术可以在不加载全部 xml 文件时,就可以解析xml文档,看一个原理图:

 韩顺平XML学习5_第1张图片

 

 

 

sax技术的案例:

package com.sax.test;

import javax.xml.parsers.*;

import org.xml.sax.Attributes;

import org.xml.sax.SAXException;

import org.xml.sax.helpers.DefaultHandler;

public class Sax1 {

//使用sax技术去解析xml文件.myclasses2.xml

public static void main(String[] args) throws Exception, SAXException {

// TODO Auto-generated method stub

//1.创建SaxParserFactory

SAXParserFactory spf=SAXParserFactory.newInstance();

//2.创建SaxParser 解析器

SAXParser saxParser=spf.newSAXParser();

//3 xml文件和事件处理对象关联

saxParser.parse("src/myclasses2.xml",new MyDefaultHandler2() );

}

}

//请思考,如何只显示学生的名字和年龄

class MyDefaultHandler2 extends DefaultHandler{

private boolean isName=false;

private boolean isAge=false;

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

// TODO Auto-generated method stub

String con=new String(ch,start,length);

if(!con.trim().equals("")&&(isName||isAge)){

System.out.println(con);

}

isName=false;

isAge=false;

//super.characters(ch, start, length);

}

@Override

public void endDocument() throws SAXException {

// TODO Auto-generated method stub

super.endDocument();

}

@Override

public void endElement(String uri, String localName, String name)

throws SAXException {

// TODO Auto-generated method stub

super.endElement(uri, localName, name);

}

@Override

public void startDocument() throws SAXException {

// TODO Auto-generated method stub

super.startDocument();

}

@Override

public void startElement(String uri, String localName, String name,

Attributes attributes) throws SAXException {

// TODO Auto-generated method stub

if(name.equals("名字")){

this.isName=true;

}else if(name.equals("年龄")){

this.isAge=true;

}

}

}

//定义事件处理类

class MyDefaultHandler1 extends DefaultHandler{

//发现文档开始

@Override

public void startDocument() throws SAXException {

// TODO Auto-generated method stub

System.out.println("startDocument()");

super.startDocument();

}

//发现xml文件中的一个元素

@Override

public void startElement(String uri, String localName, String name,

Attributes attributes) throws SAXException {

// TODO Auto-generated method stub

System.out.println("元素名称="+name);

}

//发现xml文件中的文本

@Override

public void characters(char[] ch, int start, int length)

throws SAXException {

String con=new String(ch,start,length);

//显示文本内容:

if(!con.trim().equals("")){

System.out.println(new String(ch,start,length));

}

}

//发现xml文件中一个元素介绍

@Override

public void endElement(String uri, String localName, String name)

throws SAXException {

// TODO Auto-generated method stub

super.endElement(uri, localName, name);

}

//发现文档结束

@Override

public void endDocument() throws SAXException {

// TODO Auto-generated method stub

System.out.println("endDocument()");

super.endDocument();

}

}

 

sax说明:

1. sax主要用于对xml文件解析(读取),不能去修改,删除,添加元素

2. sax 是推机制,把发现的内容告诉程序员(函数),程序员可以自己决定如何处理

 


Xml:

 

xml version="1.0" encoding="utf-8" standalone="no"?><班级>

<学生>

<名字>宋江名字>

<年龄>23年龄>

<介绍>学习刻苦介绍>

学生>

<学生 sex="">

<名字>林青霞名字>

 <年龄>32年龄>

<介绍>是一个好学生介绍>

学生>

<学生 sex=""><名字>小明2名字><年龄>34年龄><介绍>这是一个好孩子介绍>学生>班级>


你可能感兴趣的:(韩顺平XML)