Cómo agregar un valor predeterminado a una matriz cuando el elemento hijo no se encuentra en el análisis de XML?

StackOverflow https://stackoverflow.com/questions/2229189

Pregunta

Soy nuevo en development.I iphone estoy de análisis de una página XML y mostrar el contenido en una tableview.In algún bloque en la página XML, el elemento hijo ha desaparecido, quiero añadir un valor o en mi matriz, cuando el elemento hijo no le gusta en el archivo XML en particular block.My es como

 <entry>
 <id>xxx </id>
 <title>xxxxx</title>
 <gd:ratings numRaters="2"/>
 </entry> ..................................>first block
 <entry>
 <id>xxx </id>
 <title>xxxxx</title>
 </entry> ....................................>Second block
 <entry>
 <id>xxx </id>
 <title>xxxxx</title>
 <gd:ratings numRaters="2"/>
 </entry> .....................................>Third block

Estoy analizando el gd: Etiqueta de calificaciones y visualizar el valor de atributo numRates en un tableview. Estoy teniendo una matriz mutable que almacena el valor de numRates.I tiene que agregar objeto "O" en la matriz cuando el segundo bloque se analiza porque doesnot contienen gd: Calificaciones tag.Since el valor está presente en una etiqueta de atributo, para recuperar el contenido y la adición a la matriz mutable se realiza en el método analizador DidStartElement NSXML.

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{            

currentElement = [elementName copy];
if ([elementName isEqualToString:@"entry"]) {

    entry = [[NSMutableDictionary alloc] init];
    currentTitle = [[NSMutableString alloc] init];
    currentDate = [[NSMutableString alloc] init];
    NSLog(@"inside image1 ");
}else if([elementName isEqualToString:@"media:thumbnail"])
    { currentImage = [[NSMutableString alloc] init];
        if(myUrl == nil){   
        myUrl = [NSString stringWithString:[attributeDict objectForKey:@"url"]];
        }
        [currentImage appendString:myUrl];  
        [stories1 addObject:currentImage];
        myUrl=nil;
        }   else if([elementName isEqualToString:@"gd:rating"])
{
    currentRating=[[NSMutableString alloc]init];

        myRatings=[NSString stringWithString:[attributeDict objectForKey:@"numRaters"]];

    [currentRating appendString:myRatings];
    [stories2 addObject:currentRating];
}   
}

Puesto que hay 25 bloques de etiquetas de entrada y en el que 10 bloques doesnot Tienes gd elemento de calificación .So el array matriz stories2 tiene sólo el 15 values.So No puedo mostrarlo en el tableview en order.Is Hay salida para recuperar la etiqueta de atributo en el método de "personajes que se encuentran". Por favor me ayude a out.Thanks.

¿Fue útil?

Solución

Puede utilizar el método didEndElement: cuando el elemento exterior terminó, comprobar si el elemento secundario se añadió a la matriz

.

Se podría utilizar un BOOL entryHasRating Ivar y hacer lo siguiente:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{            

   currentElement = [elementName copy];
   if ([elementName isEqualToString:@"entry"]) {
     entryHasRating = NO;
     ...
   } else if ([elementName isEqualToString:@"gd:rating"]){
     entryHasRating = YES;
     ...
   }
}

A continuación, cuando termina un elemento:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
   if ([elementName isEqualToString:@"entry"]&& !entryHasRating) {
       [stories2 addObject:@"No Rating"];
       entryHasRating = YES; 
   }
   ...
}

Otros consejos

Si conoces todos los campos de datos que usted va a estar esperando, se podría construir un diccionario con marcadores de posición para todos sus valores esperados antes de analizar el código XML; a medida que analizar el código XML basta con sustituir los marcadores de posición con valores reales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top