2011-09-19 19 views
7

Pracuję z plikiem OpenStreetMap (.osm) z XmlPullParser Androida. Część Mam problemy to:XmlPullParser pobiera węzły potomne

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

muszę pracować z nd- węzłów w każdym węźle drodze, jeden drodze, węzeł na raz (to sedno), tworząc pewną dane struktura między tymi węzłami, aby była dokładna. Wydaje się, że nie ma wygodnej metody uzyskania wszystkich węzłów podrzędnych jednego węzła w XmlPullParser, więc próbowałem wielu zagnieżdżonych, jeśli/elseif- rzeczy na tych węzłach, ale nie mogę go uruchomić. Czy ktoś może podać mi przykładowy kod do pracy z węzłami potomnymi węzła, ale utrzymywanie węzłów podrzędnych podobnych węzłów nadrzędnych jest oddzielne?

+0

przyszedł tutaj, szukając dokładnie tego samego, nie zawiodłem się. Po prostu FYI, po prostu otwieram źródło mojego wykorzystania do czytania plików osm.bz2 z jdk/adk https://github.com/spyhunter99/osmreader – spy

+0

@spy Wygląda dobrze, dziękuję za udostępnienie! – FWeigl

Odpowiedz

7

ten sposób chciałbym analizować tego. Możesz z niego korzystać, ale musisz samodzielnie wprowadzić implementację klasy 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(); 
} 

Oczywiście, jeśli xml przychodzi do ciebie jest nawet trochę inny, ten dokładny kod może nie działać. Ponownie, zostawię to jako ćwiczenie dla pytającego.

+0

Zrobię to trochę inaczej, ale to dało mi prawo kierunek. Dzięki! – FWeigl

+0

@Ascorbin, mam ten sam problem i jestem nowy w XmlPullParsing proszę mi pomóc. Wysłałem moje pytanie, sprawdź to http://stackoverflow.com/questions/17807718/how-to-get-child-or-sub-tags-in-xml-using-xmlpullparsing-in-android –

+0

Mam do czynienia z tym samym problem http://stackoverflow.com/questions/39391267/how-can-i-identify-same-xml-tag-second-time –

2

można użyć następującego kodu:

int eventType=parser.getEventType(); 
    while(eventType!=XmlPullParser.END_DOCUMENT){ 
     if(eventType==XmlPullParser.START_TAG 
       && parser.getName().equals("nd"){ 
       //process your node... 
     } 
     parser.next(); 
    } 
+0

Proszę mi pomóc w tym http://stackoverflow.com/questions/39391267/how-can-i-identify-same-xml-tag-second-time –

Powiązane problemy