/*
* Лицензионное соглашение на использование набора средств разработки
* «SDK Яндекс.Диска» доступно по адресу: http://legal.yandex.ru/sdk_agreement
*
*/
package com.yandex.disk.client;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
public abstract class Parser {
private XmlPullParser xml;
private static XmlPullParser init()
throws XmlPullParserException {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
return factory.newPullParser();
}
public Parser(Reader reader)
throws XmlPullParserException {
xml = init();
xml.setInput(reader);
}
public Parser(InputStream in, String encoding)
throws XmlPullParserException {
xml = init();
xml.setInput(in, encoding);
}
public abstract void tagStart(String path)
throws IOException;
public abstract void tagEnd(String path, String text)
throws IOException;
public void parse()
throws IOException, XmlPullParserException {
StringBuilder path = new StringBuilder();
String text = null;
int event;
do {
event = xml.next();
switch (event) {
case XmlPullParser.START_TAG:
path.append("/").append(xml.getName());
tagStart(path.toString());
break;
case XmlPullParser.TEXT:
text = xml.getText();
break;
case XmlPullParser.END_TAG:
tagEnd(path.toString(), text);
path.setLength(path.length()-xml.getName().length()-1);
break;
default:
break;
}
} while (event != XmlPullParser.END_DOCUMENT);
}
}