как анализировать xml для разработки ios

#iphone #xml #ios #nsxmlparser

#iPhone #xml #iOS #nsxmlparser

Вопрос:

Итак, я знаю, как анализировать некоторые структуры XML, но в настоящее время я пытаюсь проанализировать эту конкретную структуру xml, которая немного отличается от той, к которой я привык.

обычно я бы проанализировал что-то вроде

 <xml>
  <data>
    <name>Forrest</name>
    <age>25</name>
    <username>forrestgrant</username>
  </data>
</xml>
  

Но теперь я работаю с некоторым xml, например..

 <xml>
  <data name="Forrest" age="25" username="forrestgrant" />
  <other value="6" />
</xml>
  

как мне получить доступ к этим переменным, если они структурированы таким образом?
Вот как я обычно подхожу к этой задаче, которая заключается в поиске тегов заголовка и получении данных из каждого.. однако сейчас я пытаюсь выяснить, как анализировать этот другой стиль xml.

 - (void)startTheParsingProcess:(NSData *)parserData
{
    [myDataArray release]; // clears array for next time it is used.
    myDataArray = [[NSMutableArray alloc] init]; //initalizes the array

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //incoming parserDatapassed to NSXMLParser delegate which starts parsing process 

    [parser setDelegate:self];
    [parser parse]; //Starts the event-driven parsing operation.
    [parser release];
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementName isEqual:@"item"]) {
        // NSLog(@"Found title!");
        itemString = [[NSMutableString alloc] init];
    }
}

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

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqual:@"item"]) {
        //NSLog(@"ended title: %@", itemString);
        [myDataArray addObject:itemString]; //this is where i pass the values over to my array.

        [itemString release];
        itemString = nil;
    }
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    // Passes myDataArray to the method that will sort and display the array into a uitableview.
    [self startSortingTheArray:myDataArray];
}
  

любая помощь будет с благодарностью принята..

Ответ №1:

Приведенные выше XML-данные предоставляют данные в виде атрибутов для элемента xml.

Этот метод обратного вызова предоставляет вам доступ к атрибутам в виде словаря ключевых значений (attributeDict).

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

NSLog словарь в этом методе, чтобы увидеть значения:

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

Комментарии:

1. хорошо.. Круто, я это понимаю.. Я мог бы просто пойти и прочитать NSDictionaries сейчас .. на самом деле пока их вообще не использовал.

2. словарь — это просто набор ключей и значений. У вас должен быть ключ для каждого атрибута и значение для каждого значения этого ключа. Получайте удовольствие 🙂

3. да, у меня есть общее представление о них, но мне нужно немного почитать их, прежде чем я попытаюсь сделать что-нибудь сумасшедшее! 🙂 спасибо за помощь! очень признателен

Ответ №2:

В вашем didStartItem: методе attributes словарь будет содержать значения для всех атрибутов XML.