【问题标题】:How to parse an XML file, grabbing data from specific elements如何解析 XML 文件,从特定元素中获取数据
【发布时间】:2014-10-26 19:25:41
【问题描述】:

所以我有一个 XML 文件,其中包含来自许多对象实例的数据。我正在解析这个文件,但只想要元素标签“内容”的数据

我使用的是NSXMLParser,所以我有parserDidStartDocumentdidStartElementfoundCharactersdidEndElement的方法

这是我目前的实现

在标题中:

@property (strong) NSMutableArray* AssetJSONObjects;

实施中:

l grabContent = NO;

- (void) parserDidStartDocument:(NSXMLParser *)parser {
    NSLog(@"parserDidStartDocument");
    self.AssetJSONObjects = [NSMutableArray new];
}

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

    NSLog(@"didStartElement --> %@", elementName);
    if([elementName isEqual:@"Content"])
    {
        grabContent = YES;
    }
}

-(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    NSLog(@"foundCharacters --> %@", string);
    if(grabContent)
    {
        [self.AssetJSONObjects addObject:string];
    }
}

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

    NSLog(@"didEndElement   --> %@", elementName);
    if(grabContent)
    {
        grabContent = NO;
    }
}

- (void) parserDidEndDocument:(NSXMLParser *)parser {
    NSLog(@"parserDidEndDocument");
}

所以这是我的问题:我声明/初始化我的数组 AssetJSONObjects 的方式合法吗?我初始化 bool grabContent 的方式合法吗?有没有更好的方法从特定标签中获取数据?

【问题讨论】:

    标签: objective-c cocoa parsing xml-parsing


    【解决方案1】:

    走的是便宜的路线,只是跟踪一个全局布尔值并在找到标签时设置它

    相关代码:

    BOOL grabContent = NO;
    
    - (void) parserDidStartDocument:(NSXMLParser *)parser {
        self.AssetJSONObjects = [NSMutableArray new];
    }
    
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
        if([elementName isEqual:@"Content"])
        {
            grabContent = YES;
        }
    }
    
    -(void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
        if(grabContent)
        {
            NSDictionary *JSONObject =
            [NSJSONSerialization JSONObjectWithData: [string dataUsingEncoding:NSUTF8StringEncoding]
                                            options: NSJSONReadingMutableContainers
                                              error: nil];
           if (JSONObject)
           {
              [self.AssetJSONObjects addObject:JSONObject];
           }
        }
    }
    
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
        if(grabContent)
        {
            grabContent = NO;
        }
    }
    
    - (void) parserDidEndDocument:(NSXMLParser *)parser {
        self.notifications = [self convertRawJSONToNotifications:self.AssetJSONObjects];
        if(self.notifications != nil)
        {
            self.notificationCompletionHandler(self.notifications, self.numNewNotifications);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      相关资源
      最近更新 更多