7

Android の XmlPullParser を使用して OpenStreetMap (.osm) ファイルを操作しています。私が問題を抱えている部分はこれです:

  <way id='-13264' action='modify' visible='true'>
    <nd ref='-13252' />
    <nd ref='-13251' />
    <nd ref='-13249' />
  </way>

正確には、すべてのウェイ ノード内の nd ノードを一度に 1 つのウェイ ノードで処理し (これが重要です)、それらのノード間に特定のデータ構造を作成する必要があります。XmlPullParser で 1 つのノードのすべての子ノードを取得する便利な方法はないようです。そのため、それらのノードで入れ子になった if/elseif- をたくさん試しましたが、うまくいきません。誰かがノードの子ノードを操作するためのサンプルコードを提供してくれますか?

4

2 に答える 2

8

これは私がこれを解析する方法です。Way自由に使用できますが、クラスの実装は自分で考えなければなりません。:)

List<Way> allWays = new ArrayList<Way>();
Way way;
int eventType;
while((eventType = parser.getEventType())!=XmlPullParser.END_DOCUMENT){
    if(eventType==XmlPullParser.START_TAG) {
        if("nd".equals(parser.getName()) {
            way.addNd(parser.getAttributeValue(0));
        }
        else if("way".equals(parser.getName()) {
            way = new Way();
        }
    }
    else if(eventType==XmlPullParser.END_TAG) {
        if("way".equals(parser.getName()) {
            allWays.add(way);
        }
    }
    parser.next();
}

もちろん、受け取った xml が少しでも異なる場合、この正確なコードは機能しない可能性があります。繰り返しますが、それは質問者の演習として残します。

于 2011-09-19T15:34:57.533 に答える
2

次のコードを使用できます。

    int eventType=parser.getEventType();
    while(eventType!=XmlPullParser.END_DOCUMENT){
         if(eventType==XmlPullParser.START_TAG 
               && parser.getName().equals("nd"){
              //process your node...
         }
         parser.next();
    }
于 2011-09-19T15:27:27.140 に答える