Como adicionar um valor padrão para uma matriz quando elemento filho não é encontrada na análise XML?

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

Pergunta

Eu sou novo para development.I iphone estou analisando uma página de XML e exibir o conteúdo de uma tableview.In algum bloco na página XML, o elemento filho está faltando, eu quero adicionar um valor o na minha matriz, quando o elemento filho não gosta no arquivo XML block.My particular, é 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

Eu estou analisando o gd: tag classificações e exibir seu valor numRates atributo em um tableview. Estou tendo uma matriz mutável, que armazena o valor de numRates.I tem que adicionar objeto "O" na matriz quando o segundo bloco é analisado porque doesnot conter gd: avaliações tag.Since o valor está presente em uma tag atributo, por recuperar o conteúdo e adicioná-lo à matriz mutável é feito em NSXML método parser didStartElement.

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

Uma vez que existem 25 blocos de tags de entrada e em que 10 blocos doesnot tem o GD classificação elemento .Assim o array stories2 tem apenas 15 values.So i não pode exibi-lo no tableview em order.Is Existe alguma maneira fora para recuperar a tag atributo no método de "caracteres encontrados". Por favor me ajude out.Thanks.

Foi útil?

Solução

Você pode usar o método didEndElement:. Quando o elemento exterior terminou, cheque se o elemento filho foi adicionado à matriz

Você poderia usar um BOOL entryHasRating iVar e faça o seguinte:

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

Então, quando um elemento extremidades:

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

Outras dicas

Se você conhece todos os campos de dados que você estará esperando, você poderia construir um dicionário com espaços reservados para todos os seus valores esperados antes de analisar o XML; como você analisar o XML basta substituir os espaços reservados com valores reais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top