view src/howtouse/TestSaxParser.java @ 8:d8d0855bcdfd draft

add CharReader.java , WikiLinkParser.java
author one
date Wed, 22 Aug 2012 01:44:26 +0900
parents
children e98ca9548c78
line wrap: on
line source

package howtouse;

import java.io.FileInputStream;
import java.util.Stack;

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

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

public class TestSaxParser extends DefaultHandler {

	public static void main(String[] args) {
		try {
			FileInputStream fis = new FileInputStream("./resource/article.xml");

			TestSaxParser sample = new TestSaxParser();

			SAXParserFactory factory = SAXParserFactory.newInstance();
			SAXParser parser = factory.newSAXParser();

			parser.parse(fis, sample);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	protected Stack<MyObject> stack;
	private MyObject currentObj;
	private Attributes currentAttr;
	private String currentTag;
	final static String TAGNAME_TITLE = "title";
	final static String TAGNAME_TEXT = "text";
	
	public TestSaxParser() {
		stack = new Stack<MyObject>();
	}

	public void startDocument() {
		System.out.println("read start");
	}

	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		currentTag = qName;
		if (qName.equals(TAGNAME_TITLE)) {
			currentObj = new MyObject(attributes);
			stack.push(currentObj);
		} else if (qName.equals(TAGNAME_TEXT)) {
			currentObj = new MyObject(attributes);
			stack.push(currentObj);
		} else {
			
		}
	}

	public void characters(char[] ch, int offset, int length) {
		
		String value = new String(ch, offset, length);
		if (currentObj != null) {
			currentObj.setValue(currentTag, currentAttr, value);
			if (currentTag.equals(TAGNAME_TITLE) ||
					currentTag.equals(TAGNAME_TEXT)) { 
				System.out.println("\ntag:"+currentTag);				
				System.out.println("value:\n"+value);
			}
		}
	}

	public void endElement(String uri, String localName, String qName) {
		if (currentObj == null)
			return;
		if (qName.equals(TAGNAME_TITLE)) {
			stack.pop();
		} else if (qName.equals(TAGNAME_TEXT)) {
			stack.pop();				
		} else {
			
		}
		if (stack.empty())
			currentObj = null;
		else
			currentObj = (MyObject) stack.peek();


	}

	public void endDocument() {
		System.out.println("end reading file.");
	}

}