Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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
Android xmlPullParser总是在xml的末尾返回EventType文本(4),并且从不结束_Android_Xml_Android Xmlpullparser - Fatal编程技术网

Android xmlPullParser总是在xml的末尾返回EventType文本(4),并且从不结束

Android xmlPullParser总是在xml的末尾返回EventType文本(4),并且从不结束,android,xml,android-xmlpullparser,Android,Xml,Android Xmlpullparser,我正试图从tomcat服务器接收一个xml文件并对其进行解析 但xmlPullParser事件在xml末尾返回文本值:4 为什么返回4?如何解决这个问题 [这是xml代码。] 由OSX的texteditor编写 <?xml version="1.0" encoding="utf-8"?> <resources> <school_record> <imagename>mark_goodschool.png</imagen

我正试图从tomcat服务器接收一个xml文件并对其进行解析

但xmlPullParser事件在xml末尾返回文本值:4

为什么返回4?如何解决这个问题

[这是xml代码。]

由OSX的texteditor编写

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <school_record>
        <imagename>mark_goodschool.png</imagename>
        <code>001</code>
        <name>good_elementschool</name>
        <address>inhawaii</address>
        <tel>123-123-1234</tel>
        <homepage>http://elementschool.org</homepage>
    </school_record>
</resources>
[这是解析代码。]

Thread t_downloadRes = new Thread(new Runnable() {
    @Override
    public void run() {
        try {
            //Download xml File and parse it.

            URL url = new URL(STR_SERVER_URL + STR_SERVER_XML);
            InputStream is = url.openStream();

            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new InputStreamReader(is, "utf-8"));

            int eventType = parser.getEventType();

            AA_SchoolDTO stu = null;

            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                    case XmlPullParser.START_TAG:
                        String startTag = parser.getName();

                        if ("school_record".equals(startTag)) {
                            stu = new AA_SchoolDTO();
                        }
                        if (startTag.equals("imagename")) {
                            stu.setStr_imageName(parser.nextText());
                        }
                        if (startTag.equals("code")) {
                            stu.setStr_code(parser.nextText());
                        }
                        if (startTag.equals("name")) {
                            stu.setStr_name(parser.nextText());
                        }
                        if (startTag.equals("address")) {
                            stu.setStr_address(parser.nextText());
                        }
                        if (startTag.equals("tel")) {
                            stu.setStr_tel(parser.nextText());
                        }
                        if (startTag.equals("homepage")) {
                            stu.setStr_homPage(parser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        String endTag = parser.getName();
                        if ("school_record".equals(endTag))
                            allSchoolList.add(stu);
                        break;
                }
                eventType = parser.next(); //// <== return event TEXT (value : 4) at the end of xml. 
            }
            is.close();

        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
问题:

您需要为解析器使用文本标记,因此需要在switch语句中再添加一项,即XmlPullParser.Text,以获取标记中的文本

此外,您还需要在END_标记而不是START_标记中调用AA_SchoolDTO类的setter方法

但是在开始标记中实例化AA_SchoolDTO对象

样本:


@S.J.Lim我弄错了吗?它在xml的末尾返回了END_文档。。我没有看到不断调试。@S.J.Lim这是问题还是陈述?是的,当您到达文件末尾时,它将返回END_文档
parser.nextText()
while (eventType != XmlPullParser.END_DOCUMENT) {
    String textData;
    String startTag = parser.getName();
    switch (eventType) {
        case XmlPullParser.START_TAG:
            if ("school_record".equals(startTag)) {
                stu = new AA_SchoolDTO();
            }
            break;
        case XmlPullParser.TEXT:
            textData = xpp.getText();
            break;

        case XmlPullParser.END_TAG:
             if (startTag.equals("imagename")) {
                stu.setStr_imageName(textData);
            }
            if (startTag.equals("code")) {
                stu.setStr_code(textData);
            }
            if (startTag.equals("name")) {
                stu.setStr_name(textData);
            }
            if (startTag.equals("address")) {
                stu.setStr_address(textData);
            }
            if (startTag.equals("tel")) {
                stu.setStr_tel(textData);
            }
            if (startTag.equals("homepage")) {
                stu.setStr_homPage(textData);
            }
            if ("school_record".equals(endTag))
                allSchoolList.add(stu);
            break;
    }
    eventType = parser.next(); //// <== return event TEXT (value : 4) at the end of xml.