1

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は常に null を返します。なんで?

4

2 に答える 2

3

XML の属性は次のようになります。

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

XML ドキュメントのタグに属性がありません。xmlPullParser.getText()開始タグと終了タグの間のテキスト コンテンツを取得するために使用します。

于 2015-07-31T13:57:30.707 に答える