Разбор с NSXMLParser - PullRequest
       1

Разбор с NSXMLParser

0 голосов
/ 16 января 2012

У меня есть XML-файл с этим:

<name>Alberto</name>
<subname>Martín</subname>
<age>24</age>

Я хочу разобрать его с помощью NSXMLParser и сохранить данные в нем:

NSString *name;
NSString *subname;
NSString *age;

Для этого я использую:

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

if( [elementName isEqualToString:@"name"])
{
    if (!soapResults)
    {
        soapResults = [[NSMutableString alloc] init];

}

    elementoEncontrado = YES;
}}

-(void)parser:(NSXMLParser *) parser foundCharacters:(NSString *)string{
if (elementoEncontrado)
{
    [soapResults appendString: string];
}
}

-(void)parser:(NSXMLParser *)parser 
                         didEndElement:(NSString *)elementName 
                         namespaceURI:(NSString *)namespaceURI 
                         qualifiedName:(NSString *)qName{

if ([elementName isEqualToString:@"name"])
{
    name=soapResults;
}   
if ([elementName isEqualToString:@"subname"])
{
    subname=soapResults;
}   
   if ([elementName isEqualToString:@"age"])
{
    age=soapResults;
}


 NSLog(@"%@", name, subname, age);

Проблема в том, что имя и возраст никогда не появляются ...

1 Ответ

1 голос
/ 16 января 2012

Вы должны проверить все элементы здесь, так как вы создаете NSMutableString только для name элементов.

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

    if( [elementName isEqualToString:@"name"])
    {
        if (!soapResults)
        {
            soapResults = [[NSMutableString alloc] init];
        }

        elementoEncontrado = YES;
    }
}

и освобождаете / nil ваши soapResults здесь, а также устанавливаете elementoEncontrado до NO здесь

-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

    if ([elementName isEqualToString:@"name"])
    {
        // copy or retain this, unless ARC.
        name=soapResults;
    }   

    if ([elementName isEqualToString:@"subname"])
    {
        subname=soapResults;
    }

    if ([elementName isEqualToString:@"age"])
    {
        age=soapResults;
    }
    NSLog(@"%@", name, subname, age);
    [soapResults release];
    soapResults = nil;

    elementoEncontrado = NO;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...