【问题标题】:iPhone Parse XML EnclosureiPhone 解析 XML 附件
【发布时间】:2012-07-14 05:30:44
【问题描述】:

我正在解析带有附件标签的 xml。我怎样才能做到这一点?我可以轻松地获取链接、guid、标题和 pubDate 标记并将它们解析为 NSString,但如果我尝试从附件标记创建字符串,它会返回 null。

我只需要在这部分播客中找到的 URL:

<enclosure url="http://treymorgan.podbean.com/mf/feed/bf8mvq/Accommoditions.mp3" length="29865594" type="audio/mpeg"/>

【问题讨论】:

  • 你有没有弄清楚如何用 GDataXML 做到这一点?我遇到了同样的事情......
  • @DenVog 是的,我做到了。我用它作为外壳的 NSString NSString *nodes = [[[[item elementsForName: @"enclosure"] lastObject] attributeForName: @"url"] stringValue];

标签: iphone xml xcode nsstring xml-parsing


【解决方案1】:

如果您使用的是 NSXMLParser,您可以像这样读取 url 属性(前提是您有一个名为 podcastURL 的属性来存储解析后的 URL):

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
   if ([elementName isEqualToString:@"enclosure"]) {
      self.podcastURL = [attributeDict objectForKey:@"url"];
   }
}

【讨论】:

  • 我已经使用 GDATAXML 完成了所有设置。这是我所拥有的一些东西:- (void)parseRss:(GDataXMLElement *)rootElement entries:(NSMutableArray *)entries {NSArray *channels = [rootElement elementsForName:@"channel"]; for (GDataXMLElement *channel in channels) { NSString *blogTitle = [channel valueForChild:@"title"]; NSArray *items = [channel elementsForName:@"item"]; for (GDataXMLElement *item in items) { NSString *articleTitle = [item valueForChild:@"title"]; } } }
  • 我没有使用 GDATAXML 的经验,但我的猜测是 valueForChild 只解析元素的开始标记和结束标记之间的文本。您要解析以获取 URL 的是“url”属性。我不知道如何使用 GDATAXML 但使用 NSXMLParser 很容易(如上所示)。
【解决方案2】:

这是对上述问题的直接答案。我遇到了同样的事情。感谢ATOM data parse with GData post

- (void)parseRss:(GDataXMLElement *)rootElement entries:(NSMutableArray *)entries
{

    NSArray *channels = [rootElement elementsForName:@"channel"];
    for (GDataXMLElement *channel in channels) {

        NSString *blogTitle = [channel valueForChild:@"title"];

        NSArray *items = [channel elementsForName:@"item"];
        for (GDataXMLElement *item in items) {
            NSString *podcastEnclosureUrl =  nil;

            NSString *articleTitle = [item valueForChild:@"title"];

            NSArray *enclosureArray = [item elementsForName:@"enclosure"]; //this is the code for what I needed
            for (GDataXMLElement *content in enclosureArray)
            {
                NSString *podcastEnclosureUrl = [[content attributeForName:@"url"] stringValue];
                NSLog(@"URL: %@", podcastEnclosureUrl);
            }
            NSString *articleDateString = [item valueForChild:@"pubDate"];
            NSDate *articleDate = [NSDate dateFromInternetDateTimeString:articleDateString formatHint:DateFormatHintRFC822];

            RSSPodcastFeed *entry = [[RSSPodcastFeed alloc] initWithBlogTitle:blogTitle
                                                     articleTitle:articleTitle
                                                       podcastEnclosureUrl:podcastEnclosureUrl
                                                      articleDate:articleDate];
            [entries addObject:entry];

        }
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多