xmlpullparserを使ってandroidでこのカスタムxmlを解析する方法

私はこのXMLを持っている:

  
   

    
    

   

   
    
    
   


そして、私はこのようなオブジェクト(arraylist)を解析したい:

01:["car", "blue", "01, 03"]

02:["truck", "red", "04, 85"]

2年間の勤務は同じ文字列にまとめられていることに注意してください。それは私が理解できないものです。

私が使用しているパーサーは、アンドロイドのネイティブXMLPullParserです

私はXML形式を変更することはできませんが、もしそれが価値があるなら、別のアンドロイド互換のパーサを使うことができます。

それが明確でない場合は、このようなクラスに適合しなければなりません:

private String car;
private String color;
private String years;


public ClassVehicle(String aCar, String c, String ys) {
    this.orden = aCar;
    this.intext = c;
    this.lugar = ys;


}

 getters & setters toString() and so on

最終的な結果は、自動車と同数のarraylists(オブジェクト)になります:

 ArrayList oCars = new ArrayList();

oCars.add(new ClassCar(car, color, years));
0

1 答え

あなたのスニペットはXMLではありません... XML(Extensible Markup Language) )1.1(Second Edition)を参照してください。

  • c属性値が閉じられていません。
  • xタグは閉じられていません。
  • 複数のルートを持っています...

これらがタイプミスである場合、それを修正して、本当の答えを提供できるかどうかを確認してください...

責任のあるプログラマは、その形式を使用せず、データを明確な形式に移行しますが、この種類の破損した形式をクライアントアプリケーションで使用するのは面倒ではありません。

更新

ここでは、自分のVehicle POJOを使用して、すばやくダーティな実装をしています:

public class Butelo extends Activity
{
    public static String TAG = "SO Butelo";

    public static List vehicles = null;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();
            xpp.setInput( new StringReader ( "") );

            int eventType = xpp.getEventType();
            boolean done = false;

            Vehicle currentVehicle = null;

            while (eventType != XmlPullParser.END_DOCUMENT && !done) {

                String name = null;
                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:
                        vehicles = new ArrayList();
                        break;
                    case XmlPullParser.START_TAG:
                    name = xpp.getName();
                        if (name.equals("a")){
                            currentVehicle = new Vehicle();
                            currentVehicle.setType(xpp.getAttributeValue(null, "b"));
                            currentVehicle.setColor(xpp.getAttributeValue(null, "c"));
                        } else if (name.equals("x")) {
                            currentVehicle.appendToYears(xpp.getAttributeValue(null, "year"));
                        }
                    break;
                    case XmlPullParser.END_TAG:
                    name = xpp.getName();
                    if (name.equals("a")){
                            vehicles.add(currentVehicle);
                        }
                    break;
                }
                eventType = xpp.next();
            }


        } catch (FileNotFoundException e) {
            Log.e(TAG, "", e.fillInStackTrace());
        } catch (XmlPullParserException e) {
            Log.e(TAG, "", e.fillInStackTrace());
        } catch (IOException e) {
            Log.e(TAG, "", e.fillInStackTrace());
        }

        for(int i=0;i

それはちょうどあなた自身の方法であなたを置くことです...

2
追加された
よく私が編集するスニペットです、それは関連する部分だけでした。完了しました。
追加された 著者 butelo,
私は質問を編集します
追加された 著者 butelo,
Txたくさん、それは動作します。 :)
追加された 著者 butelo,
さて、私はすぐにコードで私の答えを更新します...
追加された 著者 Renaud,
あなたはリストが好きですか?xは何ですか?あなたはすでに車のための頼りないPOJOをデザインしましたか?
追加された 著者 Renaud,
回答の質はあなたの質問の質によって決まります。最初のショットですべての有用で必要な情報を提供してください...
追加された 著者 Renaud,
実装が実際の実装から始まる場合は、私の答えを検証することを忘れないでください。
追加された 著者 Renaud,