SAX解析xml文档(1)

前端之家收集整理的这篇文章主要介绍了SAX解析xml文档(1)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>

<书架> 
  <书> 
    <书名>java就业培训教程</书名>  
    <作者>郝斌</作者>  
    <售价>36.2元</售价> 
  </书>  
  <书> 
    <书名 name="xxx">javascript就业培训教程</书名>  
    <作者>哈哈哈</作者>  
    <售价>36.2元</售价> 
  </书> 
</书架>
</span>


<span style="font-size:14px;">package com.rj.sax;

public class Book {
	
	private String  name;
	private String author;
	private String price;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	
	
}
</span>
<span style="font-size:14px;">package com.rj.sax;

import java.io.IOException;

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

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

public class Demo1 {

	/**
	 * sax 解析xml文档
	 * @throws SAXException 
	 * @throws ParserConfigurationException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws ParserConfigurationException,SAXException,IOException {
			
		//1.创建解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
		
		//2.得到解析器
		SAXParser sp = factory.newSAXParser();
		
		//3.得到读取器
		XMLReader reader = sp.getXMLReader();
		
		//4.设置内容处理
		reader.setContentHandler(new ListHandler());
		
		//5.读取xml文档内容
		reader.parse("src/book.xml");
	}

}

//得到xml文档所有内容
class ListHandler implements ContentHandler{
//ContentHandler-->内容处理器
	@Override
	public void setDocumentLocator(Locator locator) {
	}

	@Override
	public void startDocument() throws SAXException {
		
	}

	@Override
	public void endDocument() throws SAXException {
		
	}

	@Override
	public void startPrefixMapping(String prefix,String uri)
			throws SAXException {
		
	}

	@Override
	public void endPrefixMapping(String prefix) throws SAXException {
		
	}

	//查找到元素会调用这个方法
	@Override
	public void startElement(String uri,String localName,String qName,Attributes atts) throws SAXException {
		
		System.out.println("<"+qName+">");
		
		for(int i=0;atts!=null && i<atts.getLength();i++){
			//atts!=null && i<atts.getLength();以后写代码的时候尽量这样写,不要写if(atts!=null)
			String name = atts.getQName(i);
			String value = atts.getValue(i);
			 
			System.out.println(name+"="+value);
		}
		
	}

	@Override
	public void endElement(String uri,String qName)
			throws SAXException {
		System.out.println("<"+qName+"/>");
	}

	//内容处理的方法
	@Override
	public void characters(char[] ch,int start,int length)
			throws SAXException {
		System.out.println(new String(ch,start,length));
	}

	@Override
	public void ignorableWhitespace(char[] ch,int length)
			throws SAXException {
		
	}

	@Override
	public void processingInstruction(String target,String data)
			throws SAXException {
		
	}

	@Override
	public void skippedEntity(String name) throws SAXException {
		
	}
	
	
	
	
	
}
</span>



<span style="font-size:14px;">package com.rj.sax;

import java.io.IOException;

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

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class Demo2 {

	/**
	 * sax 解析xml文档
	 * @throws SAXException 
	 * @throws ParserConfigurationException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws ParserConfigurationException,IOException {
			
		//1.创建解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
		
		//2.得到解析器
		SAXParser sp = factory.newSAXParser();
		
		//3.得到读取器
		XMLReader reader = sp.getXMLReader();
		
		//4.设置内容处理
		reader.setContentHandler(new TagValueHandler());
		
		//5.读取xml文档内容
		reader.parse("src/book.xml");
	}

}

//ContentHandler -->处理器
//DefaultHandler是ContentHandler接口的实现类
//获得指定标签的值  -->第二本书     <作者>张孝祥</作者>
class TagValueHandler extends DefaultHandler{

	private String currentTag;//记录当前解析到的是什么标签
	private int needNumber = 2;//记住想获取第几个作者的标签
	private int currentNumber; //当前解析到的是第几个
	@Override
	public void startElement(String uri,Attributes attributes) throws SAXException {
			
		currentTag = qName;
		
		if(currentTag.equals("作者")){
			currentNumber++;
		}
			
	}

	@Override
	public void characters(char[] ch,int length)
			throws SAXException {
		
		if("作者".equals(currentTag) && currentNumber==needNumber){
			System.out.println(new String(ch,length));
		}
			
	}
	
	@Override
	public void endElement(String uri,String qName)
			throws SAXException {
	
		currentTag = null;
		
	}

}
 </span>

<span style="font-size:14px;">package com.rj.sax;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

public class Demo3 {

	/**
	 * sax 解析xml文档
	 * @throws SAXException 
	 * @throws ParserConfigurationException 
	 * @throws IOException 
	 */
	public static void main(String[] args) throws ParserConfigurationException,IOException {
			
		//1.创建解析工厂
		SAXParserFactory factory = SAXParserFactory.newInstance();
		
		//2.得到解析器
		SAXParser sp = factory.newSAXParser();
		
		//3.得到读取器
		XMLReader reader = sp.getXMLReader();
		
		//4.设置内容处理
		BeanListhandler handler = new BeanListhandler();
		reader.setContentHandler(handler);
		
		//5.读取xml文档内容
		reader.parse("src/book.xml");
		
		List<Book> list = handler.getList();
		System.out.println(list);
	}

}

//ContentHandler -->处理器
//DefaultHandler是ContentHandler接口的实现类
 

class BeanListhandler extends DefaultHandler{

	private List list = new ArrayList();
	private String currentTag ;
	private Book book;
	@Override
	public void startElement(String uri,Attributes attributes) throws SAXException {
		currentTag = qName;
		
		if("书名".equals(currentTag)){
				book = new Book();
		}
		
	}
	@Override
	public void characters(char[] ch,int length)
			throws SAXException {
		
		
		if("书名".equals(currentTag)){
			String name = new String(ch,length);
			book.setName(name);
		}
		if("作者".equals(currentTag)){
			String author = new String(ch,length);
			book.setAuthor(author);
		}
		if("售价".equals(currentTag)){
			String price = new String(ch,length);
			book.setPrice(price);
		}
		
		
	}
	
	@Override
	public void endElement(String uri,String qName)
			throws SAXException {
		
	
		//当遇到每一本书的结束标签的时候,说明一本书已经存贮完毕,要存到List集合中,等待下一本书的存贮
		 if("书".equals(qName)){
			 list.add(book); 
		 }
		
     	currentTag = null;
		
	}
	//提供一个List的集合,让外界使用
	public List<Book> getList() {
		return list;
	}

	
}
 
 </span>

猜你在找的XML相关文章