0

XMLPullParser を使用して XML を読み取る必要があります。しかし、解析しようとすると、eventType は 0 (つまり、START_DOCUMENT) で始まり、すぐに 1 (つまり、END_DOCUMENT) にスキップして、他のすべてのタグをスキップします。

ここに私のサンプルコードがあります:

public void parseProperties (InputStream in)
{
    try
    {
        XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
        XmlPullParser pullParser = pullParserFactory.newPullParser();
        pullParser.setInput(in, null);

        int eventType = pullParser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT)
        {
            String name = pullParser.getName();
            switch (eventType)
            {
                case XmlPullParser.START_TAG:
                    break;
                case XmlPullParser.END_TAG:
                    break;
            }
            eventType = pullParser.next();
        }
    }
    catch (XmlPullParserException ex)
    {
    }
    catch (IOException ex)
    {
    }
    finally
    {

    }
}

スイッチケースをヒットできない理由を誰か教えてもらえますか?

4

1 に答える 1

1

これは常に私にとってはうまくいきます:

public class ParseXML {

    private String xmlData;

    public ParseXML (String xmlData) {

        this.xmlData = xmlData;
    }

    public boolean process () {

        boolean status = true;
        boolean inEntry = false;
        String textValue = "";

        try {

            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();
            xpp.setInput(new StringReader(this.xmlData));

            int eventType = xpp.getEventType();

            while (eventType != XmlPullParser.END_DOCUMENT) {

                String tagName = xpp.getName();

                switch (eventType) {

                    case XmlPullParser.START_TAG:
                        if (tagName.equalsIgnoreCase("MyTagStart")) {
                            inEntry = true;
                        }
                        break;

                    case XmlPullParser.TEXT:
                        textValue = xpp.getText();
                        break;

                    case XmlPullParser.END_TAG:
                        if (inEntry) {
                            if (tagName.equalsIgnoreCase("MyTagEnd")) {
                                inEntry = false;
                            }
                            else if (tagName.equalsIgnoreCase("SomeTag")) {
                                someInfo.setInfo(textValue);
                            }
                        }
                        break;

                    default:
                        //
                }
                eventType = xpp.next();
            }

        } catch (Exception e) {

            status = false;
            e.printStackTrace();
        }

        return true;
    }
}

XML データを渡すインスタンスを作成するだけです。

ParseXML parseXML = new ParseXML(contentXML);
parseXML.process();
于 2017-01-11T22:30:21.810 に答える