2011-09-19 9 views
7

Estoy trabajando con un archivo OpenStreetMap (.osm) con XmlPullParser de Android. La parte estoy teniendo problemas con esto es:XmlPullParser obtener nodos secundarios

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

que necesito para trabajar con los nodos ND- dentro de cada nodo manera-, un nodo manera- en un momento (que es el quid), creando una cierta datos estructura entre esos nodos para ser precisos. Parece que no hay un método conveniente para obtener todos los nodos secundarios de un nodo en el XmlPullParser, así que probé mucho de ese tipo de elementos anidados en esos nodos, pero no puedo hacerlo funcionar. ¿Puede alguien proporcionarme algún código de muestra para trabajar con nodos secundarios de un nodo, pero manteniendo separados los nodos secundarios de nodos parentales similares?

+0

vino aquí buscando exactamente lo mismo, no me decepcionó. Solo un FYI, acabo de abrir mi producto de utilidad para leer archivos osm.bz2 de jdk/adk https://github.com/spyhunter99/osmreader – spy

+0

@spy Se ve bien, gracias por compartir! – FWeigl

Respuesta

7

Así es como me gustaría analizar esto. Usted es libre de usarlo, pero tendrá que idear la implementación para la clase Way por su cuenta. :)

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(); 
} 

Por supuesto, si el xml que llega a usted es incluso un poco diferente, este código exacto puede no funcionar. De nuevo, lo dejaré como un ejercicio para el que pregunta.

+0

Lo haré un poco diferente, pero esto me dio la razón dirección. ¡Gracias! – FWeigl

+0

@Ascorbin, estoy enfrentando el mismo problema y soy nuevo en XmlPullParsing, por favor, ayúdenme. He publicado mi pregunta, compruebe este http://stackoverflow.com/questions/17807718/how-to-get-child-or-sub-tags-in-xml-using-xmlpullparsing-in-android –

+0

Estoy frente a la misma problema http://stackoverflow.com/questions/39391267/how-can-i-identify-same-xml-tag-second-time –

2

se puede utilizar el siguiente código:

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

Por favor, ayúdenme con este http://stackoverflow.com/questions/39391267/how-can-i-identify-same-xml-tag-second-time –

Cuestiones relacionadas