2
<News TotalRecords="10">
<News ID="381222" DateTime="2013-06-12T00:05:00" Title="abc" HeadlineImgSrc="http://www.msa.net/common/news/images/381222/headline.jpg"/>
<News ID="381192" DateTime="2013-06-11T16:46:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/381192/headline.jpg"/>
<News ID="381085" DateTime="2013-06-11T11:34:00" Title="sdsadsadsadsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/381085/headline.jpg"/>
<News ID="381042" DateTime="2013-06-11T09:16:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/381042/headline.jpg"/>
<News ID="380972" DateTime="2013-06-11T00:01:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/380972/headline.jpg"/>
<News ID="380908" DateTime="2013-06-10T16:23:00" Title="asdsad" HeadlineImgSrc="http://www.asdsad.net/common/news/images/380908/headline.jpg"/>
</News>

我想解析这个xml。但它是根名称以新闻开头,其他元素也以新闻开头。
这是我尝试过的(没有成功)

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

    if ([elementName isEqualToString:@"News"]) {
        app.listArray = [[NSMutableArray alloc] init];        
    } else if([elementName isEqualToString:@"News"] ){

        theList = [[List alloc] init];

        theList.ThumbImageURL = [attributeDict objectForKey:@"HeadlineImgSrc"];
        theList.Title = [attributeDict objectForKey:@"Title"];
        theList.URL = [attributeDict objectForKey:@"DateTime"];  
    }
}

如何使用 NSXMLParser 解析这种类型的 XML?

4

2 回答 2

1

您可以检查是否存在TotalRecords

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

    if ([elementName isEqualToString:@"News"])
    {
        NSString *totalRecords = attributeDict[@"TotalRecords"];

        if (totalRecords) 
        {
            app.listArray = [[NSMutableArray alloc] init];
        } 
        else
        {
            theList = [[List alloc] init];

            theList.ThumbImageURL = [attributeDict objectForKey:@"HeadlineImgSrc"];
            theList.Title = [attributeDict objectForKey:@"Title"];
            theList.URL = [attributeDict objectForKey:@"DateTime"];

            [app.listArray addObject:theList];
        }
    }
}

坦率地说,我宁愿看到你修复 XML 源代码,因为将相同的元素名称用于不同的目的是一种糟糕的设计,但如果你坚持使用现有的 XML 结构,那么上面的东西可以处理它。

于 2013-06-12T13:58:56.427 回答
1

您可以使用属性来区分它们。

试试这个代码:

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

   if ([attributeDict objectForKey:@"TotalRecords"])
   {
       app.listArray = [[NSMutableArray alloc] init];
   }
   else if([attributeDict objectForKey:@"ID"])
   {

      theList = [[List alloc] init];

      theList.ThumbImageURL = [attributeDict objectForKey:@"HeadlineImgSrc"];
      theList.Title = [attributeDict objectForKey:@"Title"];
      theList.URL = [attributeDict objectForKey:@"DateTime"];
   }
}
于 2013-06-12T13:59:26.080 回答