iOS: атрибут NSXMLParser get - PullRequest
       25

iOS: атрибут NSXMLParser get

3 голосов
/ 02 декабря 2011

Я действительно новичок в этом, и я пытаюсь читать RSS-канал, и пока все хорошо.Вот как я это делаю:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
  if ([elementName isEqualToString:@"item"]) {
    [item setObject:currentTitle forKey:@"title"];
    [item setObject:currentLink forKey:@"link"];
    [item setObject:currentSummary forKey:@"summary"];
    [item setObject:currentDate forKey:@"date"];
    [item setObject:currentImage forKey:@"enclosure"];

    [stories addObject:[item copy]];
    NSLog(@"adding story: %@", currentTitle);
  }
}

Проблема в корпусе.Как это выглядит в XML:

<enclosure length="150" url="urltoimage.jpg" type="image/jpeg" />

Как мне получить атрибут url из этого элемента в моей функции?

EDIT XML выглядит так:

<item>
    <title>...</title>
    <link>...</link>
    <description>...</description>
    <pubDate>...</pubDate>
    <enclosure length="150" url="urltoimage.jpg" type="image/jpeg" />
</item>

А моя функция foundCharacters выглядит так:

- (void)parser: (NSXMLParser *)parser foundCharacters:(NSString *)string {
  if ([currentElement isEqualToString:@"title"]) {
    [currentTitle appendString:string];
  } else if ([currentElement isEqualToString:@"link"]) {
    [currentLink appendString:string];
  } else if ([currentElement isEqualToString:@"description"]) {
    [currentSummary appendString:string];
  } else if ([currentElement isEqualToString:@"pubDate"]) {
    [currentDate appendString:string];
  }
}

Ответы [ 2 ]

12 голосов
/ 02 декабря 2011
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
  namespaceURI:(NSString *)namespaceURI
 qualifiedName:(NSString *)qualifiedName
    attributes:(NSDictionary *)attributeDict
{
    // just do this for item elements
    if(![elementName isEqual:@"enclosure"])
        return;

    // then you just need to grab each of your attributes
    NSString * name = [attributeDict objectForKey:@"url"];

    // ... get the other attributes

    // when we have our various attributes, you can add them to your arrays
    [m_NameArray addObject:name];

    // ... same for the other arrays
}
6 голосов
/ 02 декабря 2011

Вы должны обработать еще один обратный вызов для атрибутов отслеживания:

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

attributeDict - словарь со всеми найденными аргументами элемента

...