diff src/howtouse/TextTagParser.java @ 16:5c8c554ee3ac draft

hg mv TestSaxParser.java TextTagParser.java
author one
date Thu, 23 Aug 2012 09:03:33 +0900
parents src/howtouse/TestSaxParser.java@fa38ded4c054
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/howtouse/TextTagParser.java	Thu Aug 23 09:03:33 2012 +0900
@@ -0,0 +1,93 @@
+package howtouse;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Stack;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class TextTagParser extends DefaultHandler {
+
+	protected Stack<MyObject> stack;
+	private MyObject currentObj;
+	private Attributes currentAttr;
+	private String currentTag;
+	private String currentTitleName;
+	final static String TAGNAME_TITLE = "title";
+	final static String TAGNAME_TEXT = "text";
+	WikiLinkParser linkParser = new WikiLinkParser();
+	
+	HashMap<String,HashSet<String>> hash = new HashMap<String,HashSet<String>>();
+	HashSet<String> currentLinkHash = new HashSet<String>();
+	
+	public TextTagParser() {
+		stack = new Stack<MyObject>();
+	}
+	
+	public HashMap<String,HashSet<String>> getHash() {
+		return hash;
+	}
+
+	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)) { 
+				currentTitleName = value;
+			}
+			if(currentTag.equals(TAGNAME_TEXT)) { 
+				HashSet<String> tmpHash = linkParser.parse(value);
+				if (tmpHash.size() <= 0) return;
+				for (String link: tmpHash) {
+					currentLinkHash.add(link);
+				}
+			}
+		}
+	}
+
+	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)) {
+			hash.put(currentTitleName, currentLinkHash);
+			currentLinkHash = new HashSet<String>();
+			stack.pop();				
+		} else {
+			
+		}
+		if (stack.empty())
+			currentObj = null;
+		else
+			currentObj = (MyObject) stack.peek();
+	}
+
+	public void endDocument() {
+//		System.out.println("end reading file.");
+	}
+
+}