XML解析将字符串转换为int

时间:2015-10-15 15:52:08

标签: java android xml xml-parsing

我制作了一个字符串,其中包含我正在处理的xml的一部分。 该文件中有一些整数,我无法将它们从String转换为int。我尝试使用getAttributeValue(0),但它没有用。所以我想知道是否有人可以解决我的问题。感谢

import android.os.AsyncTask;
import android.util.Log;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;


import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URL;



class ReadXMLFile extends AsyncTask<Void, Void, Boolean> {


    @Override
    protected Boolean doInBackground(Void... params) {
        Log.d("beginning: ", "Pocetak");

        //TODO - Call getFeeds Method to populate feeds list & return true/false depending on result of operation
        try {

            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();

            String xmldata = <cenovnik>
<cenovnikStavkaList>
    <id>12195432</id>
    <izlaznaStanica>100</izlaznaStanica>
    <kategorijaVozila>0</kategorijaVozila>
    <ulaznaStanica>100</ulaznaStanica>
</cenovnikStavkaList>
<cenovnikStavkaList>
    <id>12197782</id>
    <izlaznaStanica>100</izlaznaStanica>
    <kategorijaVozila>1</kategorijaVozila>
    <ulaznaStanica>100</ulaznaStanica>
</cenovnikStavkaList>

             xpp.setInput(new StringReader( xmldata ));
            Log.d("step1a", "string");
            int eventType = xpp.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                String tagname = xpp.getName();
                if(eventType == XmlPullParser.START_DOCUMENT) {
                    Log.d("Step 2a: ","Start document");
                } else if(eventType == XmlPullParser.START_TAG) {
                    Log.d("Step 2b: ", "Start tag " + xpp.getName());
                    if(xpp.getName().equals("cenovnikStavkaList")){

                        String testid = xpp.getAttributeValue(null, "id");
                        Log.d("Step 2d - ID: ", testid);
                    }


                } else if(eventType == XmlPullParser.END_TAG) {

                } else if(eventType == XmlPullParser.TEXT) {

                     Log.d("Step 2d: ", xpp.getText());

                }

                eventType = xpp.next();
            }
            Log.d("Step 2e: ", "End document");
            Log.d("Step 2: ", "radi");

            return true;
        } catch (Exception e) {
            return false;
        }

    }

    @Override
    protected void onPostExecute(Boolean result) {
        if(result){
            Log.d("END TEST","done");
        }
    }

    public static InputStream getInputStream(URL url) {
        try {
            return url.openConnection().getInputStream();
        } catch (IOException e) {
            return null;
        }
    }



}

1 个答案:

答案 0 :(得分:0)

这些数字位于叶标记内,如StringBuilder text; } else if(eventType == XmlPullParser.START_TAG) { text = new StringBuilder(); } else if(eventType == XmlPullParser.TEXT) { if (text != null) { text.append(xpp.getText()); } } else if(eventType == XmlPullParser.END_TAG) { if (text != null) { String s = text.toString(); try { int n = Integer.parseInt(s); // do something with number n } catch (NumberFormatException e) { // No number } text = null; } }

XML解析事件需要状态,将数据保存在变量中。 正式地,你可以在两个标签内有几个TEXT,因此:

cenovnikStavkaList.id = n;

创建一个新的字段cenovnikStavkaList,它自己是每个相同命名标记的字段ID,并且

Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class

并在END_TAG上将其添加到列表中。

相关问题