SAX解析xml文档


 friends.xml

<?xml version="1.0" encoding="utf-8"?>


<friends date="2012">
    
	<!--此处为注释-->

    <friend id="1">

        <姓名>小红</姓名>
		<QQ>1429286632</QQ>
		<!--address>上海</address-->

	</friend>

	<friend>

        <姓名>小平</姓名>	
		<QQ>785066655</QQ>
        <address>北京</address>
	</friend>

	<friend>

        <姓名 mark="hello">小敏</姓名>
		<QQ>980404356</QQ>
        <address>深圳</address>
	</friend>

	<friend>

        <姓名>小良</姓名>
		<QQ>523569240</QQ>
        <address>广州</address>
	</friend>

	<friend>

        <姓名>小健</姓名>
		<QQ>1138045755</QQ>
        <address>赣州</address>
	</friend>	

</friends>


 

SAXParseXML :

 

 

import java.io.File ;
import java.util.Stack ;

import javax.xml.parsers.SAXParserFactory ;
import javax.xml.parsers.SAXParser ;

import org.xml.sax.Attributes ;
import org.xml.sax.SAXException ;
import org.xml.sax.helpers.DefaultHandler ;


//利用SAX解析xml文档,SAX是基于事件处理的,占内存比较小
//解析过了的,就不能在回头解析

public class SAXParseXML
{
	public static void main(String[] args) throws Exception
	{
		//获取SAX解析器工厂
        SAXParserFactory spf = SAXParserFactory.newInstance() ;
        
		//获取具体的SAX解析器
		SAXParser ap = spf.newSAXParser() ;
        ap.parse(new File("friends.xml"), new MyDefaultHandler()) ;

	}

}

class MyDefaultHandler extends DefaultHandler
{
	//定义一个栈来存取解析出来的信息
	private Stack<String> stack = new Stack<String>() ;
    
	private String name = null ;
	private String qq = null ;
	private String address = null ;
	
	//重写父类的方法
	@Override
	public void startElement(String uri,
                         String localName,
                         String qName,
                         Attributes attributes) throws SAXException
      
	{
		//把元素压栈
		stack.push(qName) ;
		for (int i = 0; i < attributes.getLength() ; i++ )
		{
			//获取属性名字
			String attrName = attributes.getQName(i) ;
			
			//获取属性的值
			String attrValue = attributes.getValue(i) ;

			System.out.println(attrName + " = " + attrValue) ;
		}

	}
    
	@Override
	public void characters(char[] ch,
                       int start,
                       int length) throws SAXException
                
	{
		//查看堆栈顶部的对象,但不从堆栈中移除它。
		String s = stack.peek() ;
		if ("姓名".equals(s))
		{
			name = new String(ch, start, length) ;

		}
		else if ("QQ".equals(s))
		{
			qq = new String(ch, start, length) ;
		}
		else if ("address".equals(s))
		{
			address = new String(ch, start, length) ;
		}

	}

	@Override
	public void endElement(String uri,
                       String localName,
                       String qName) throws SAXException
	{
		//  移除堆栈顶部的对象
		stack.pop() ;

		if ("friend".equals(qName))
		{
			System.out.println("姓名 :" + name) ;
			System.out.println("QQ :" + qq) ;
			System.out.println("address :" + address) ;
			System.out.println() ;
		}


	}


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值