【问题标题】:Quick fix with XML?使用 XML 快速修复?
【发布时间】:2013-07-08 17:13:50
【问题描述】:

我目前正在使用 YouTube API V2,但在收集视频描述时我得到了不正确的数据。

This is the link where I'm getting the XML information from.

这是我想得到的字符串

我们能否为所有伟大目标达到 5000 个赞? :) http://www.facebook.com/GudjonDanielYT https://twitter.com/GudjonDaniel

但我得到了这个

GudjonDanielhttp://gdata.youtube.com/feeds/api/users/GudjonDanielkM0YirXKa4Lb7MsgqHWiMwEntertainmentgudjondanielCan 我们为所有伟大的目标都达到了 5000 个赞? :) http://www.facebook.com/GudjonDanielYT https://twitter.com/GudjonDaniel

我的代码,在media:description

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementname isEqualToString:@"title"] || [elementname isEqualToString:@"content"])
    {
        currentNodeContent = [[NSMutableString alloc] init];
    }
    else if ([elementname isEqualToString:@"entry"])
    {
        currentFeed = [ChanelFeeds alloc];
    }
    else if ([elementname isEqualToString:@"yt:duration"])
    {
        currentFeed.duration = [attributeDict objectForKey:@"seconds"];
    }
    else if ([elementname isEqualToString:@"yt:statistics"])
    {
        currentFeed.views = [attributeDict objectForKey:@"viewCount"];
    }
    else if ([elementname isEqualToString:@"gd:rating"])
    {
        currentFeed.rating = [attributeDict objectForKey:@"average"];
    }
    else if ([elementname isEqualToString:@"media:player"])
    {
        currentFeed.streamURL = [NSURL URLWithString:[attributeDict objectForKey:@"url"]];
    }
    else if ([elementname isEqualToString:@"media:thumbnail"] && !currentFeed.thumbnailURL)
    {
        currentFeed.thumbnailURL = [NSURL URLWithString:[attributeDict objectForKey:@"url"]];
    }
}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementname isEqualToString:@"title"])
    {
        currentFeed.title = currentNodeContent;
        currentNodeContent = nil;
    }
    else if ([elementname isEqualToString:@"media:description"])
    {
        currentFeed.description = currentNodeContent;
        currentNodeContent = nil;
    }
    else if ([elementname isEqualToString:@"entry"])
    {
        [self.feeds addObject:currentFeed];
        currentFeed = nil;
        currentNodeContent = nil;
    }
}

【问题讨论】:

    标签: objective-c xml youtube-api


    【解决方案1】:

    您在didStartElement(初始化currentNodeContent)中查找的元素名称与您在didEndElement 方法中用于保存和重置currentNodeContent 的元素名称不匹配。

    因此,你的台词说:

    if ([elementname isEqualToString:@"title"] || [elementname isEqualToString:@"content"])
    {
        currentNodeContent = [[NSMutableString alloc] init];
    }
    

    大概应该说:

    if ([elementname isEqualToString:@"title"] || [elementname isEqualToString:@"media:description"])
    {
        currentNodeContent = [[NSMutableString alloc] init];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多