4

私の Android アプリは、Simple XMLを使用して巨大な XML ファイルを読み取ります。明らかに時間がかかります。実際、現時点では、要素のリストを 1 つ取得するだけで済みます。Simple XML が他のすべての要素を読み取らないようにする方法はありますか?

別のライブラリを使用したくありません。この種の高度なことが Simple XML で可能かどうかは疑問です。

助けてくれてありがとう。


編集

MH提案を使用すると、解析にはまだ 50 秒かかります...

XmlPullParserを使用してIlya Blokhの他のソリューションを試してみたいと思います。

XML ファイルの必要な部分は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
    ....
    <ANIMALS>
        <animal>
            <name>Dog</name>
            <color>white</color>
            <color>black</color>
            <color>brown</color>
        </animal>
        <animal>
            <name>Cat</name>
            <color>white</color>
            <color>black</color>
            <color>gray</color>
            <color>red</color>
        </animal>
        ...
    </ANIMALS>
    ...
</ROOT>

このクラスにデータを入力したいと思います:

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Animals {

    /**
     * Key: animal name, Value: animal colors
     */
    private Map<String, List<String>> entries;

    public Animals() {
        entries = new HashMap<String, List<String>>();
    }

    public void addAnimal(String name, List<String> colors) {
        entries.put(name, colors);
    }

    public List<String> getColors(String animalName) {
        return entries.get(animalName);
    }
}

リストと XmlPullParser を処理するにはどうすればよいですか? 私はパーサーの操作に慣れていません...

再度、感謝します

4

4 に答える 4

4

Loose Mapping フラグを使用して、文書構造全体を指定するという厳密な要件を回避できます。Persisterこの機能は、要素の単一のリストにのみ関心があると述べているため、で直接使用する場合に特に便利です。リンクされた例を見て読んでください。

残念ながら、私は単純な XML の内部について、「他のすべての要素を読み取らないようにする」ことについて何も言えません。上記の緩やかなマッピング オプションを使用すると、関心のあるマッピングのみが得られると思いますが、XML ドキュメント全体の解析を回避できるとは思えません。

于 2012-04-24T10:39:36.170 に答える
1

これにはsimplexmlを使用します。xmlが複雑になると、Androidで使用するのに最適なのは単純なxmlです。したがって、あなたの場合、コードは次のようになります。十分にフォーマットできませんでしたが、役に立ちます。短所:(xml構造に応じて)多数のクラスを作成する必要がありますが、一度作成すると、その後は非常にスムーズに航行できます。また、値を評価するためにクラスにゲッターを追加します。お役に立てれば

import java.util.ArrayList;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Namespace;
import org.simpleframework.xml.Root;

@Root(name = "ANIMALS", strict = false)
@Namespace(reference = "whatever", prefix = "sumthing")
public class Animal {
@ElementList(required = false, inline = true)// this will work even if some other
// element gets added to your ANIMALS element.
private ArrayList<Animal> somename; // does not matter
}

@Root(name = "animal", strict = false)
@Namespace(reference = "whatever", prefix = "sumthing")
public class Animal {
@Element(required = false)// to make it work even when this element is not part of 
    the string
private String name;
@ElementList(required = false, inline = true)
private ArrayList<Color> colors;
}

@Element(name = "color")
@Namespace(reference = "whatever", prefix = "sumthing")
public class Color {
@Element(required = false)   
private String clr;
public String getColor(){
return clr; 
}
}
于 2012-04-24T17:42:31.657 に答える
0

たぶん、あなたはどれほど簡単かを見たときにあなたの考えを変えるでしょうXmlPullParser

あなたはここでそれについて読むことができます:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html

使用例XmlPullParser

XmlPullParser parser = getResources().getXml(R.xml.yourxml);
try {
            while (parser.getEventType() != XmlPullParser.END_DOCUMENT){
                if(parser.getEventType() == XmlPullParser.START_TAG && 
                        parser.getName().equalsIgnoreCase("object")){

                            name = parser.getAttributeValue(null, "name");
                            site = parser.getAttributeValue(null, "site");
                            phone = parser.getAttributeValue(null, "phone");
                            adds = parser.getAttributeValue(null, "address");
                }
                parser.next();
            }
        }  catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
于 2012-04-24T10:35:14.643 に答える
0

最初に、アプリケーションの要件を考慮して正当化する必要があります。そもそも SimpleXML を使用する必要がある理由です。Java ベースの XML 解析を使用していない理由。利用できるオプションのリストは次のとおりです。Java に最適な XML パーサー

于 2012-04-24T10:31:58.753 に答える