Как разобрать следующий XML? - PullRequest
1 голос
/ 12 октября 2010
<colors>
    <color colorName="Abracadabra" colorNumber="D51-2" rColor="209" gColor="224" bColor="229" colorCollection="Harmony" colorFamily="Shaded" rating="3" surfaces="" colorGroup="Blues" />
    <color colorName="Abyss" colorNumber="B50-1" rColor="233" gColor="247" bColor="249" colorCollection="" colorFamily="Clean" rating="3" surfaces="" colorGroup="Blues" />
<colors>

Я получаю указанные выше данные XML из веб-службы.Я не понимаю, как его проанализировать. Я хотел бы иметь colorNameArray, содержащий все названия цветов, colorNumberArray, содержащий все номера цветов и так далее для всех деталей.Код для этого с парсерами делегатов заметен.Спасибо

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Эта ссылка дает хорошее представление о синтаксическом анализе XML с использованием nsxmlparser. (Доступен пример кода).

Значения представлены в виде атрибутов, поэтому их можно получить из attributeDict делегата didStartElement.метод nsxmlparser.

для примера:

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

 if([elementName isEqualToString:@"color"])
{
    NSString* colorName = [attributeDict objectForKey:@"colorName"]];

}   
}

All The Best.

0 голосов
/ 12 октября 2010

просто используйте простой атрибут. Анализ XML ниже - это пример кода

-(void)startParsingForFriendRequest:(NSString *)userID  
{

    NSString *urlString = [NSString stringWithFormat:@"http://www.example.com/user_id=%@",userID];
    ////NSLog(@"urlString : %@",urlString);
    NSURL *xmlURL = [NSURL URLWithString:urlString];

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:xmlURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0]autorelease];

    NSURLResponse *returnedResponse = nil;
    NSError *returnedError = nil;
    NSData *itemData  = [NSURLConnection sendSynchronousRequest:request returningResponse:&returnedResponse error:&returnedError];
    NSString *itemString = [[[NSString alloc] initWithBytes:[itemData bytes] length:[itemData length] encoding:NSUTF8StringEncoding]autorelease];

    //NSLog(@"itemString : %@",itemString);


    NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:itemData];       
    [xmlParser setDelegate:self];

    [xmlParser parse];

}

- (void)parserDidStartDocument:(NSXMLParser *)parser
{

    ////NSLog(@"parserDidStartDocument");

}

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
{
    ////NSLog(@"parseErrorOccurred");
    NSString * errorString = [NSString stringWithFormat:@"Error (Error code %i )", [parseError code]];
    UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"Error loading data" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [errorAlert show];
    [errorAlert release];

}

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

{
    ////NSLog(@"didStartElement");

    //////NSLog(@"elementName : %@",elementName);

    //////NSLog(@"namespaceURI : %@",namespaceURI);

    //////NSLog(@"qualifiedName : %@",qualifiedName);

    ////NSLog(@"attributeDict : %@",attributeDict);

    [registerNewArr addObject:attributeDict];

}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    ////NSLog(@"foundCharacters");


}

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

{
    ////NSLog(@"didEndElement");


}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{

    if ([[[registerNewArr objectAtIndex:1]objectForKey:@"Transaction"]isEqualToString:@"loginxml"]) {
        [(LoginViewController *)obj getRegisterResult:registerNewArr];

    }

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