如何为ios开发解析xml

时间:2011-10-10 03:09:03

标签: 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];
}

任何帮助将不胜感激..

2 个答案:

答案 0 :(得分:3)

上面的xml数据提供了数据作为xml元素的属性。

此回调方法使您可以将属性作为键值字典(attributeDict)进行访问。

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

NSLog在该方法中输出字典以查看值:

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

答案 1 :(得分:1)

didStartItem:方法中,attributes字典将包含所有XML属性的值。