61 lines
1.9 KiB
Java
61 lines
1.9 KiB
Java
package simple;
|
|
|
|
import android.util.Xml;
|
|
|
|
import org.xmlpull.v1.XmlPullParser;
|
|
import org.xmlpull.v1.XmlPullParserException;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.util.ArrayList;
|
|
|
|
public class SimpleXml
|
|
{
|
|
public SimpleXmlNode parse(InputStream in) throws IOException, XmlPullParserException
|
|
{
|
|
try
|
|
{
|
|
XmlPullParser parser = Xml.newPullParser();
|
|
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
|
|
parser.setInput(in, null);
|
|
return readFeed(parser);
|
|
}
|
|
finally
|
|
{
|
|
in.close();
|
|
}
|
|
}
|
|
|
|
public SimpleXmlNode readFeed(XmlPullParser parser) throws IOException, XmlPullParserException
|
|
{
|
|
ArrayList<SimpleXmlNode> stack = new ArrayList<SimpleXmlNode>();
|
|
while (parser.next() != XmlPullParser.START_TAG) {}
|
|
while (parser.next() != XmlPullParser.END_DOCUMENT)
|
|
{
|
|
if (parser.getEventType() == XmlPullParser.START_TAG)
|
|
{
|
|
SimpleXmlNode node = new SimpleXmlNode();
|
|
node.name = parser.getName();
|
|
for (int i = 0; i < parser.getAttributeCount(); i++)
|
|
{
|
|
String p = parser.getAttributePrefix(i);
|
|
if (p == null)
|
|
p = "";
|
|
node.attributes.put(p + parser.getAttributeName(i), parser.getAttributeValue(i));
|
|
}
|
|
if (stack.size() > 0)
|
|
stack.get(stack.size()-1).appendChild(node);
|
|
stack.add(node);
|
|
}
|
|
else if (parser.getEventType() == XmlPullParser.END_TAG)
|
|
{
|
|
if (stack.size() > 1)
|
|
stack.remove(stack.size() - 1);
|
|
else
|
|
return stack.get(0);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|