package org.itsnat.droid.impl.domparser;
import android.util.Xml;
import org.itsnat.droid.ItsNatDroidException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
/**
* Created by jmarranz on 11/05/2016.
*/
public class XMLDOMAnimDiscriminatorParser
{
private static XmlPullParser newPullParser(Reader input)
{
try
{
XmlPullParser parser = Xml.newPullParser();
// No es necesario, así es más rápido: parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
parser.setInput(input);
return parser;
}
catch (XmlPullParserException ex)
{
throw new ItsNatDroidException(ex);
}
}
public String parse(String markup)
{
StringReader input = new StringReader(markup);
return parse(input);
}
private String parse(Reader input)
{
try
{
XmlPullParser parser = newPullParser(input);
return parse(parser);
}
catch (IOException ex) { throw new ItsNatDroidException(ex); }
catch (XmlPullParserException ex) { throw new ItsNatDroidException(ex); }
finally
{
try { input.close(); }
catch (IOException ex) { throw new ItsNatDroidException(ex); }
}
}
private String parse(XmlPullParser parser) throws IOException, XmlPullParserException
{
return getRootElementName(parser);
}
protected static String getRootElementName(XmlPullParser parser) throws IOException, XmlPullParserException
{
while (parser.next() != XmlPullParser.END_TAG)
{
if (parser.getEventType() != XmlPullParser.START_TAG) // Nodo de texto etc
continue;
return parser.getName();
}
throw new ItsNatDroidException("INTERNAL ERROR: NO ROOT ELEMENT");
}
}