Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/*
 * For license please see accompanying LICENSE.txt file (available also at http://www.xmlpull.org/).
 * According to www.xmlpull.org, this code is in the public domain.
 */

import java.io.IOException;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

public class Main {
    public static String text(final XmlPullParser pp) throws XmlPullParserException, IOException {
        if (pp.getEventType() != XmlPullParser.START_TAG || pp.isEmptyElementTag())
            throw new IllegalStateException("expecting start tag to get text from");

        enter(pp);

        String text = "";
        if (pp.getEventType() == XmlPullParser.TEXT)
            text = pp.getText();

        exit(pp);

        return text;
    }

    /**
     * enters current tag
     * 
     * @throws IOException
     */
    public static void enter(final XmlPullParser pp) throws XmlPullParserException, IOException {
        if (pp.getEventType() != XmlPullParser.START_TAG)
            throw new IllegalStateException("expecting start tag to enter");
        if (pp.isEmptyElementTag())
            throw new IllegalStateException("cannot enter empty tag");

        pp.next();
    }

    public static void enter(final XmlPullParser pp, final String tagName)
            throws XmlPullParserException, IOException {
        pp.require(XmlPullParser.START_TAG, null, tagName);
        enter(pp);
    }

    public static void exit(final XmlPullParser pp) throws XmlPullParserException, IOException {
        exitSkipToEnd(pp);

        if (pp.getEventType() != XmlPullParser.END_TAG)
            throw new IllegalStateException("expecting end tag to exit");

        pp.next();
    }

    public static void exit(final XmlPullParser pp, final String tagName)
            throws XmlPullParserException, IOException {
        exitSkipToEnd(pp);
        pp.require(XmlPullParser.END_TAG, null, tagName);
        pp.next();
    }

    public static void next(final XmlPullParser pp) throws XmlPullParserException, IOException {
        skipSubTree(pp);
        pp.next();
    }

    public static void require(final XmlPullParser pp, final String tagName)
            throws XmlPullParserException, IOException {
        pp.require(XmlPullParser.START_TAG, null, tagName);
    }

    private static void exitSkipToEnd(final XmlPullParser pp) throws XmlPullParserException, IOException {
        while (pp.getEventType() != XmlPullParser.END_TAG) {
            if (pp.getEventType() == XmlPullParser.START_TAG)
                next(pp);
            else if (pp.getEventType() == XmlPullParser.TEXT)
                pp.next();
            else
                throw new IllegalStateException();
        }
    }

    /**
     * Skip sub tree that is currently porser positioned on. <br>
     * NOTE: parser must be on START_TAG and when funtion returns parser will be positioned on corresponding END_TAG
     */
    public static void skipSubTree(final XmlPullParser pp) throws XmlPullParserException, IOException {
        pp.require(XmlPullParser.START_TAG, null, null);

        int level = 1;
        while (level > 0) {
            final int eventType = pp.next();
            if (eventType == XmlPullParser.END_TAG)
                --level;
            else if (eventType == XmlPullParser.START_TAG)
                ++level;
        }
    }
}