Как разобрать XML для разработки IOS - PullRequest
4 голосов
/ 10 октября 2011

Так что я знаю, как анализировать некоторые 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];
}

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

Ответы [ 2 ]

3 голосов
/ 10 октября 2011

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

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

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

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

NSLog(@"attributes: %@", attributeDict);
1 голос
/ 10 октября 2011

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

...