RSS-канал XML & ATOM вопрос разбора - GData - iPhone - PullRequest
0 голосов
/ 12 марта 2011

У меня есть вопрос, касающийся разбора документа XLM, точнее данных формата ATOM. (RSS лента).

Вот пример документа xlm:

<item>
            <title>Panty + Stocking Print Preview</title>
            <link>http://SonicRocksMySocks.deviantart.com/art/Panty-Stocking-Print-Preview-200615179</link>
            <guid isPermaLink="true">http://SonicRocksMySocks.deviantart.com/art/Panty-Stocking-Print-Preview-200615179</guid>
            <pubDate>Fri, 11 Mar 2011 21:43:34 PST</pubDate>
            <media:title type="plain">Panty + Stocking Print Preview</media:title>

            <media:keywords></media:keywords>
            <media:rating>nonadult</media:rating>
            <media:category label="Movies &amp; TV">fanart/digital/drawings/movies</media:category>
            <media:credit role="author" scheme="urn:ebu">SonicRocksMySocks</media:credit>
            <media:credit role="author" scheme="urn:ebu">http://a.deviantart.net/avatars/s/o/sonicrocksmysocks.png?15</media:credit> 
            <media:copyright url="http://sonicrocksmysocks.deviantart.com">Copyright 2011 *SonicRocksMySocks</media:copyright>
            <media:thumbnail url="http://th00.deviantart.net/fs71/300W/i/2011/070/d/c/panty___stocking_print_preview_by_sonicrocksmysocks-d3bfvnv.png" height="351" width="300"/>

            <media:thumbnail url="http://th02.deviantart.net/fs71/150/i/2011/070/d/c/panty___stocking_print_preview_by_sonicrocksmysocks-d3bfvnv.png" height="150" width="128"/>
            <media:content url="http://th08.deviantart.net/fs71/PRE/i/2011/070/d/c/panty___stocking_print_preview_by_sonicrocksmysocks-d3bfvnv.png" height="967" width="826" medium="image"/>
            <media:content url="http://www.deviantart.com/download/200615179/" medium="document"/>
            <description><![CDATA[ The final version of this print will be available for sale at Sakura Con 2011. :3<br /><div><img src="http://th00.deviantart.net/fs71/300W/i/2011/070/d/c/panty___stocking_print_preview_by_sonicrocksmysocks-d3bfvnv.png" alt="thumbnail" /></div> ]]></description>
            <media:description type="html"><![CDATA[ The final version of this print will be available for sale at Sakura Con 2011. :3 ]]></media:description>
        </item>

Вот как я анализирую заголовок, pubDate и значения ссылок:

 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"];
        NSString *articleUrl = [item valueForChild:@"link"];            
        NSString *articleDateString = [item valueForChild:@"pubDate"];        
        NSDate *articleDate = [NSDate dateFromInternetDateTimeString:articleDateString formatHint:DateFormatHintRFC822];



        RSSEntry *entry = [[[RSSEntry alloc] initWithBlogTitle:blogTitle 
                                                  articleTitle:articleTitle 
                                                    articleUrl:articleUrl 
                                                   articleDate:articleDate] autorelease];
        [entries addObject:entry];                        

    }      
}

Я не знаю, как получить медиа: содержимое строки. Как мне это сделать? Кто-нибудь может мне помочь с этим?

Большое спасибо, Андрей

Ответы [ 3 ]

0 голосов
/ 12 марта 2011

Вы пробовали перебирать дочерние элементы item и проверять их в отладчике или NSLog?

0 голосов
/ 13 декабря 2011

Я знаю, какой код вы используете. Это на самом деле очень просто. Вы делаете это так же, как вы получаете «title» и «link» и «pubDate».

 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"];
    NSString *articleUrl = [item valueForChild:@"link"];            
    NSString *articleDateString = [item valueForChild:@"pubDate"];        
    NSDate *articleDate = [NSDate dateFromInternetDateTimeString:articleDateString formatHint:DateFormatHintRFC822];

    // Right here
    NSString *mediaCont = [item valueForChild:@"media:content"];



    RSSEntry *entry = [[[RSSEntry alloc] initWithBlogTitle:blogTitle 
                                              articleTitle:articleTitle 
                                                articleUrl:articleUrl 
                                               articleDate:articleDate] autorelease];
    [entries addObject:entry];                        

}      
}

После этого вам нужно будет изменить метод init для RSSEntry, чтобы принять это новое поле. Вы должны попытаться взглянуть на код, который определяет valueForChild, и посмотреть, как он использует синтаксический анализатор GDataXML. Или вы можете использовать NSXML как предложено.

0 голосов
/ 12 марта 2011

Сначала попробуйте использовать NSXMLParsing с этим простым руководством

http://blancer.com/tutorials/i-phone/76999/parsing-xml-files/
...