【问题标题】:XmlPullParser skip from START_DOCUMENT to END_DOCUMENT eventTypeXmlPullParser 从 START_DOCUMENT 跳转到 END_DOCUMENT eventType
【发布时间】:2020-06-22 08:11:24
【问题描述】:

我正在尝试在 Android 应用程序中解析 xml 文件。当我尝试处理它时,除了 START_DOCUMENT 和 END_DOCUMENT 之外,我没有在 START 之后立即收到 eventType。看起来我会提供空文件或其他东西。奇怪的是,我在 5 个不同的 xml 文件上尝试了这段代码,并且它工作(工作我的意思是我得到的 eventTypes 与 START 和 END 不同)用于损坏的一个(缺少一些结束标签)。我在想也许我创建了错误的 xml 文件,但我什至下载了一些示例 xml 文件,但它也没有用。

一些代码:

public static void parseXML(Activity activity) throws XmlPullParserException, IOException {
        XmlPullParserFactory parserFactory;
        parserFactory = XmlPullParserFactory.newInstance();
        parserFactory.setNamespaceAware(true);
        XmlPullParser parser = parserFactory.newPullParser();
        InputStream inputStream = activity.getAssets().open("XML_RENAME.xml");
        InputStreamReader isReader = new InputStreamReader(inputStream);
        BufferedReader reader = new BufferedReader(isReader);
        parser.setInput(reader);
        processParces(parser);
    }

    private static void processParces(XmlPullParser parser) throws XmlPullParserException, IOException {
        int eventType = parser.getEventType();
        String tagname = "";
        String text = "";
        while(eventType != XmlPullParser.END_DOCUMENT)
        {
            tagname = parser.getName();
            switch(eventType)
            {
                case XmlPullParser.START_TAG:
                    if (tagname.equalsIgnoreCase(KEY_REGION)) {
                    }
                    break;

                case XmlPullParser.TEXT:
                    //grab the current text so we can use it in END_TAG event
                    text = parser.getText();
                    Log.e("Text: ", text);
                    break;

                case XmlPullParser.END_TAG:
                    if (tagname.equalsIgnoreCase(KEY_SECTOR)) {
                        Log.e("XML ",KEY_SECTOR);
                    } else if (tagname.equalsIgnoreCase(KEY_DIRECTIONS)) {
                        Log.e("XML ",KEY_DIRECTIONS );
                    } else if (tagname.equalsIgnoreCase(KEY_CONDITIONS)) {
                        Log.e("XML ",KEY_CONDITIONS );
                    } else if (tagname.equalsIgnoreCase(KEY_NEIGHBORS)) {
                        Log.e("XML ",KEY_NEIGHBORS );
                    } else if (tagname.equalsIgnoreCase(KEY_CONTINUATIONS)) {
                        Log.e("XML ",KEY_CONTINUATIONS );
                    } else if (tagname.equalsIgnoreCase(KEY_BLOCKS)) {
                        Log.e("XML ",KEY_BLOCKS );
                    }
                    break;

                default:
                    break;
            }
            eventType = parser.next();
            }
        }

【问题讨论】:

    标签: java android xml xmlpullparser android-xmlpullparser


    【解决方案1】:

    我发现了一个问题。一些 xml 文件在开始时包含一些额外的字节,特别是“EF BB BF”。它称为 BOM (Byte-Order-Mark)。当 xml 包含这些额外的字节时,我们的 XmlPullParser 无法正常工作并且表现得就像没有 START_TAG 事件并转到 END_DOCUMENT。

    【讨论】:

    • @SteveBlackwell 您只需手动编辑该 xml 文件并删除多余的字节。
    猜你喜欢
    • 1970-01-01
    • 2015-09-20
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2013-02-02
    相关资源
    最近更新 更多