繁体   English   中英

XmlPullParser getAttributeValue始终返回null

[英]XmlPullParser getAttributeValue always returns null

我正在尝试解析xml文件。 但是方法getAttributeValue总是为我返回null 首先这是xml文件

<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

这是我的代码。 我正在使用AsyncTask

 public class XmlParser extends AsyncTask<Void, Void, String> {

        private XmlPullParserFactory xmlFactoryObject;
        private XmlPullParser myParser;
        private File file;
        FileInputStream fis;

        String value;

        public XmlParser() {
            try {
                xmlFactoryObject = XmlPullParserFactory.newInstance();
                myParser = xmlFactoryObject.newPullParser();

            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }

        public void setFile(File file1) {
            file = file1;
            execute();
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

            try {
                if(file == null){
                    Toast.makeText(getActivity(), "NULL", Toast.LENGTH_LONG).show();
                }else{
                    Toast.makeText(getActivity(), "NOT NULL " + file.getName(), Toast.LENGTH_LONG).show();
                    fis = new FileInputStream(file);
                    myParser.setInput(fis, null);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }

        @Override
        protected String doInBackground(Void... params) {
            int event = 0;
            try {
                event = myParser.getEventType();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
            while (event != XmlPullParser.END_DOCUMENT) {
                String name=myParser.getName();
                switch (event){
                    case XmlPullParser.START_TAG:
                        break;

                    case XmlPullParser.END_TAG:
                        if(name.equals("from")){
                            value = myParser.getAttributeValue(null, "value"); // this line always return null
                            Log.d(getTag(), "NEZINAU " + value);
                        }
                        break;
                }
                try {
                    event = myParser.next();
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    Log.d(getTag(), "BAD " + e.getLocalizedMessage());
                }
            }
            return value;
        }

        @Override
        protected void onPostExecute(String aVoid) {
            super.onPostExecute(aVoid);
            System.out.println("myEND " + aVoid);
            Toast.makeText(getActivity(), "THE END!!! " + value, Toast.LENGTH_LONG).show();
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

此行value = myParser.getAttributeValue(null, "value"); // this line always return null value = myParser.getAttributeValue(null, "value"); // this line always return null总是返回null。 为什么?

XML中的属性如下所示:

<Tag attribute="value">content</Tag>

XML文档中的标签没有属性。 您想使用xmlPullParser.getText()来获取开始和结束标记之间的文本内容。

您必须在事件XmlPullParser.TEXT上使用XmlPullParser.getText()检索值。 在此处查看示例: http : //developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

尝试这样的事情:

    String currentName = "";
    while (event != XmlPullParser.END_DOCUMENT) {
        String name=myParser.getName();
        switch (event){
            case XmlPullParser.START_TAG:
                currentName = name;
                break;
            case XmlPullParser.TEXT:
                if("from".equals(currentName)){
                    value = myParser.getText(); 

                    Log.d(getTag(), "NEZINAU " + value);                        
                    }

                break;


            case XmlPullParser.END_TAG:
                break;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM