韩顺平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文档,看一个原理图:

 

 

 

 

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文件中一个元素介绍</xx>

@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</年龄><介绍>这是一个好孩子</介绍></学生></班级>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值