package org.newdawn.slick.util.xml;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.util.ResourceLoader;
import org.w3c.dom.Document;
/**
* A simple utility wrapper around the Java DOM implementation to hopefully
* make XML parsing that bit easier without requiring YAL.
*
* @author kevin
*/
public class XMLParser {
/** The factory used to to create document builders that parse XML into the DOM */
private static DocumentBuilderFactory factory;
/**
* Create a new parser
*/
public XMLParser() {
}
/**
* Parse the XML document located by the slick resource loader using the
* reference given.
*
* @param ref The reference to the XML document
* @return The root element of the newly parse document
* @throws SlickException Indicates a failure to parse the XML, most likely the
* XML is malformed in some way.
*/
public XMLElement parse(String ref) throws SlickException {
return parse(ref, ResourceLoader.getResourceAsStream(ref));
}
/**
* Parse the XML document that can be read from the given input stream
*
* @param name The name of the document
* @param in The input stream from which the document can be read
* @return The root element of the newly parse document
* @throws SlickXMLException Indicates a failure to parse the XML, most likely the
* XML is malformed in some way.
*/
public XMLElement parse(String name, InputStream in) throws SlickXMLException {
try {
if (factory == null) {
factory = DocumentBuilderFactory.newInstance();
}
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(in);
return new XMLElement(doc.getDocumentElement());
} catch (Exception e) {
throw new SlickXMLException("Failed to parse document: "+name, e);
}
}
}