Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright 2013 Naver Business Platform Corp. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. /
 
 package com.handmark.pulltorefresh.configuration.xml;
 
 
 
 
 
XmlPullNode-based Parser using XmlPullParser
When you override this class, you must define parse strategies, and return the root node (in generateRootNode() of XmlPullNodes containing each parse strategy, and return the result (in getResult() for which provide that to client after parse.

Parameters:
<R> Result type
Author(s):
Wonjun Kim
 
 abstract class XmlPullNodeParser<R> {
 	private final XmlPullParserWrapper parser;
 	private final XmlPullNode rootNode;
this flag prevents duplicate parse.
 
 	private boolean isParsed = false;

Parameters:
parser which has not been read yet.
throw NullPointerException if parser is null
 
 		Assert.notNull(parser"XmlPullParser");
 		this. = parser;
 	}

Returns:
entry point for XmlPullNode-based parse
 
 	protected abstract XmlPullNode generateRootNode();
Parse the data and return <R> type result
even if you call this methods several times, parsing happens once and no more duplicate parse

 
 	public final R parse() throws XmlPullParserExceptionIOException {
 
 		// avoid duplicate parse 
 		if (  == true ) {
 			return getResult();
 		}
 		
 		// First, Find the root node.
 		DocumentState documentState;
 		
 		String rootName = .getName();
 		documentState = .nextStartTagByName(rootName);
 		
 		if ( documentState.END.equals(documentState)) {
 			throw new XmlPullParserException(rootName + " tag has not found.");
 		}
 		// deeply parsing
 		 = true;
 		return getResult();
 	}
Return a result after parse
Be called from parse() method

Returns:
result value to return after parsing is done
 
 	protected abstract R getResult();
Call XmlPullNode.XmlPullNodeCallback.process(org.xmlpull.v1.XmlPullParser) and parse child nodes of current node

Parameters:
currentNode target of which call a callback and parse children
Throws:
org.xmlpull.v1.XmlPullParserException
java.io.IOException
 
 	private void parseInternal(XmlPullNode currentNodethrows XmlPullParserExceptionIOException {
 		// NOTE : too many permissions to node
 		currentNode.getCallback().process();
 		
 		while ( true ) {
			// if document is end during finding the end tag of this current node, it throws the exception below. 
			if ( .isEndDocument() ) {
				throw new XmlPullParserException("XML document is invalid.");
			}			
			// if the end tag is found, parsing this scope is being ended.
			if ( .isEndTag() && .matchCurrentTagName(currentNode.getName())) {
				break;
			}
			// get next tag
			// when a child node is found, deeply parsing
			if ( .isStartTag() ) {
				String currentTagName = .getName();
				XmlPullNode childNode = currentNode.getChild(currentTagName);
				if ( childNode != null ) {
					// recursively!
					parseInternal(childNode);
				}
			}
		}
New to GrepCode? Check out our FAQ X