Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java XmlPullParser从开始文档跳到结束文档事件类型_Java_Android_Xml_Xmlpullparser_Android Xmlpullparser - Fatal编程技术网

Java XmlPullParser从开始文档跳到结束文档事件类型

Java XmlPullParser从开始文档跳到结束文档事件类型,java,android,xml,xmlpullparser,android-xmlpullparser,Java,Android,Xml,Xmlpullparser,Android Xmlpullparser,我正在尝试在Android应用程序中解析xml文件。当我试图处理它时,除了开始文档和开始后的结束文档之外,我不会收到eventType。看来我要送空文件什么的。奇怪的是,我在5个不同的xml文件上尝试了这段代码,对于损坏的一个(缺少了一些结束标记),这段代码有效(有效,我的意思是我得到的事件类型不同于开始和结束)。我在想,也许我创建了错误的xml文件,但我甚至下载了一些示例xml文件,但它也不起作用 一些代码: public static void parseXML(Activity activ

我正在尝试在Android应用程序中解析xml文件。当我试图处理它时,除了开始文档和开始后的结束文档之外,我不会收到eventType。看来我要送空文件什么的。奇怪的是,我在5个不同的xml文件上尝试了这段代码,对于损坏的一个(缺少了一些结束标记),这段代码有效(有效,我的意思是我得到的事件类型不同于开始和结束)。我在想,也许我创建了错误的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();
            }
        }

我发现了一个问题。一些xml文件在开始时包含一些额外的字节,具体来说是“EF-BB-BF”。它被称为BOM(
字节顺序标记
)。当xml包含这些额外的字节时,我们的
XmlPullParser
无法正常工作,其行为就像没有开始标记事件并转到结束文档一样

我发现了一个问题。一些xml文件在开始时包含一些额外的字节,具体来说是“EF-BB-BF”。它被称为BOM(
字节顺序标记
)。当xml包含这些额外的字节时,我们的
XmlPullParser
无法正常工作,其行为就像没有开始标记事件并转到结束文档一样