Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ************************************************************************
  #
  #  DivConq
  #
  #  http://divconq.com/
  #
  #  Copyright:
  #    Copyright 2014 eTimeline, LLC. All rights reserved.
  #
 #  License:
 #    See the license.txt file in the project's top-level directory for details.
 #
 #  Authors:
 #    * Andy White
 #
 ************************************************************************ */
 package divconq.xml;
 
 import java.io.File;
 import java.io.Reader;
 import java.util.Map;
 
 
 public class XmlReader implements IParseHandler {
 	/*
 	 * Read and parse xml that is held a string
 	 * 
 	 * @param xml the string that holds the Xml
 	 * @return the root xml element
 	 */
 	public static FuncResult<XElementparse(CharSequence xmlboolean keepwhitespace) {
 		return new XmlReader(new CharSequenceReader(xml), keepwhitespace).parse();
 	}
 
 	/*
 	 * Read and parse xml that is pointed to by a reader (utf-8)
 	 * 
 	 * @param in the reader that holds the Xml
 	 * @return the root xml element
 	 */
 	public static FuncResult<XElementparse(Reader inboolean keepwhitespace) {
 		return new XmlReader(inkeepwhitespace).parse();
 	}
 
 	/*
 	 * Read and parse xml that is pointed to by a stream (utf-8)
 	 * 
 	 * @param in the stream that holds the Xml
 	 * @return the root xml element
 	 */
 	public static FuncResult<XElementparse(InputStream inboolean keepwhitespace) {
 		return new XmlReader(new InputStreamReader(in), keepwhitespace).parse();
 	}
 
 	/*
 	 * Read and parse xml that is held in memory (utf-8)
 	 * 
 	 * @param mem the memory that holds the Xml
 	 * @return the root xml element
 	 */
 	//public static FuncResult<XElement> parse(Memory mem, boolean keepwhitespace) {
 	//	return new XmlReader(mem, keepwhitespace).parse();
 	//}
 
 	/*
 	 * Read and parse an xml file
 	 * 
 	 * @param fullname the file name to read and parse
 	 * @return the root xml element
 	 */
 	public static FuncResult<XElementloadFile(String fullnameboolean keepwhitespace) {
 		try {
 			return new XmlReader(new FileReader(fullname), keepwhitespace).parse();
 		} 
 		catch (FileNotFoundException x) {
 			res.exitTr(233, fullname);
 			return res;
 		}
 	}
 
 	/*
 	 * Read and parse an xml file
 	 * 
 	 * @param fl the file to read and parse
 	 * @return the root xml element
 	 */
	public static FuncResult<XElementloadFile(File flboolean keepwhitespace) {
		try {
			return new XmlReader(new FileReader(fl), keepwhitespace).parse();
		catch (FileNotFoundException x) {
			res.exitTr(233, fl.getPath());
			return res;
		}
	}
	/*
	 * Read and parse an xml file
	 * 
	 * @param fl the file to read and parse
	 * @return the root xml element
	 */
	public static FuncResult<XElementloadFile(Path flboolean keepwhitespace) {
		try {
			return new XmlReader(Files.newBufferedReader(fl), keepwhitespace).parse();
		catch (FileNotFoundException x) {
			res.exitTr(233, fl);
			return res;
		}
		catch (IOException x) {
			res.exit(1, "Error loading file: " + fl);
			return res;
		}
	}
	// instance
The source of the XML
	protected Reader input = null;
The root of the class structure
	protected XElement top = null;
The current element being worked on
	protected XElement element = null;
Holds all the parent elements of the current element
	protected Stack<XElementstack = null;
	protected boolean keepwhitespace = false;
	/*
	 * Set XML source to be a Reader 
	 * 
	 * @param input the XML source to be parsed
	 */
	public XmlReader(Reader inputboolean keepwhitespace) {
		this. = input;
		this. = keepwhitespace;
	}

Parses the XML and returns the root element. Comments and PI will be missing, this is a really basic and lightweight XML utility.

Returns:
the root XML element
	public FuncResult<XElementparse() {
		this. = null;
		this. = null;
		this. = new Stack<XElement>();
		OperationResult or = XmlParser.parse(thisthis.);
		if (this. == null)
			res.errorTr(247);
		if (!or.hasErrors())
			res.setResult(this.);
		return res;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see IParseHandler#startDocument()
	 */
	public void startDocument(OperationResult or) {
		this. = null;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see IParseHandler#endDocument()
	 */
	public void endDocument(OperationResult or) {
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see IParseHandler#startElement(java.lang.String, java.lang.String, java.util.Map, int, int)
	 */
	public void startElement(OperationResult orString tagMap<StringStringattributesint lineint col) {
		XElement newElement = new XElement(tag);
		newElement.setLocation(linecol);
		for (Map.Entry<String,Stringentry : attributes.entrySet()) 
			newElement.setRawAttribute((Stringentry.getKey(),
					(Stringentry.getValue());
		if (this. == null)
			this. = newElement;
		else
			this..add(newElement);
		if (this. != null)
			this..push(this.);
		this. = newElement;
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see IParseHandler#element(java.lang.String, java.lang.String, java.util.Map, int, int)
	 */
	public void element(OperationResult orString tagMap<StringStringattributesint lineint col) {
		XElement newElement = new XElement(tag);
		newElement.setLocation(linecol);
		for (Map.Entry<String,Stringentry : attributes.entrySet()) 
			newElement.setRawAttribute((Stringentry.getKey(),
					(Stringentry.getValue());
		if (this. == null)
			this. = newElement;
		else
			this..add(newElement);
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see IParseHandler#endElement(java.lang.String, java.lang.String)
	 */
	public void endElement(OperationResult orString tag) {
		if (!this..isEmpty())
			this. = this..pop();
	}
	/*
	 * (non-Javadoc)
	 * 
	 * @see IParseHandler#text(java.lang.String, boolean, int, int)
	 */
	public void text(OperationResult orString strboolean cdataint lineint col) {
		if (this. == null)
			return;
		if (!this.) {
			str = str.trim();
			// non-cdata text should not keep its extra whitespace
			if (!cdata)
				str = StringUtil.stripWhitespacePerXml(str);
			if (StringUtil.isEmpty(str)) 
				return;
		}
		XText text = new XText();
		if (cdata)
			text.setValue(strtrue);
		else
			text.setRawValue(str);
		this..add(text);
	}
New to GrepCode? Check out our FAQ X