2013-03-15 61 views
0

heightI'm是一个noob iphone开发,我想解析XML包含多个属性的元素。我有几个关于解析XML的教程,但是他们都没有展示解析具有多个属性的元素的步骤。我试图用NSXMLParser解析xml。我想解析媒体的第一次出现:第二个属性的值的缩略图元素。任何帮助是极大的赞赏。如何为多个属性解析XML?

我的代码:

// XML

<item> 
    <title>March 15 AM Metals Commentary: Eric Zuccarelli</title> 
    <link>http://link.brightcove.com/services/link/bcpid1683318714001/bclid1644543007001/bctid2228319176001?src=mrss</link> 
    <description>Eric Zuccarelli, Independent Copper Trader</description> 
    <guid>http://link.brightcove.com/services/link/bcpid1683318714001/bclid1644543007001/bctid2228319176001?src=mrss</guid> 
    <pubDate>Fri, 15 Mar 2013 06:40:38 -0700</pubDate> 
    <media:player height="546" url="http://link.brightcove.com/services/link/bcpid1683318714001/bclid1644543007001/bctid2228319176001?src=mrss" width="966"/> 
    <media:keywords>commentary,CME Group,financial products,cmedaily,nymex,metals,youtube,Market Commentary,Zuccarelli</media:keywords> 
    <media:thumbnail height="90" url="http://brightcove.vo.llnwd.net/d21/unsecured/media/49919183001/49919183001_2228333209001_th-514324d6e4b02e906f7476ba-806787304001.jpg?pubId=49919183001" width="120"/> 
    <media:thumbnail height="360" url="http://brightcove.vo.llnwd.net/d21/unsecured/media/49919183001/49919183001_2228333208001_vs-514324d6e4b02e906f7476ba-806787304001.jpg?pubId=49919183001" width="480"/> 
    <media:category>Metals</media:category> 
    <bc:playerid>1683318714001</bc:playerid> 
    <bc:lineupid>1644543007001</bc:lineupid> 
    <bc:titleid>2228319176001</bc:titleid> 
    <bc:duration>215</bc:duration> 
    <dcterms:valid/> 
    <bc:accountid>49919183001</bc:accountid> 
</item> 

我的代码follws:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    
    //NSLog(@"found this element: %@", elementName); 
    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"item"]) { 
     // clear out our story item caches... 
     item = [[NSMutableDictionary alloc] init]; 
     currentTitle = [[NSMutableString alloc] init]; 
     currentDate = [[NSMutableString alloc] init]; 
     currentSummary = [[NSMutableString alloc] init]; 
     currentLink = [[NSMutableString alloc] init]; 
     currentBright = [[NSMutableString alloc] init]; 
     if([elementName isEqualToString:@"media:thumbnail"]){ 
      if([attributeDict objectForKey:@"height"]==90){ 
       currentBright = [attributeDict objectForKey:@"url"]; 
       NSLog(@"Brightcove Url:%@", currentBright); //<--Not reaching this point. 
      } 
     } 
    } 
} 

编辑

if([elementName isEqualToString:@"media:thumbnail"]&&[attributeDict objectForKey:@"height"]==90){ 
    currentBright = [attributeDict objectForKey:@"   
    NSLog(@"Brightcove Url:%@", currentBright); 
} 
+0

你在说什么元素? – 2013-03-15 20:00:59

+0

我想解析第一个出现的其网址 – 2013-03-15 20:02:42

回答

1

只是试用这个....

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

    currentElement = [elementName copy]; 
    if ([elementName isEqualToString:@"item"]) { 
    item = [[NSMutableDictionary alloc] init]; 
    currentTitle = [[NSMutableString alloc] init]; 
    currentDate = [[NSMutableString alloc] init]; 
    currentSummary = [[NSMutableString alloc] init]; 
    currentLink = [[NSMutableString alloc] init]; 
    currentBright = [[NSMutableString alloc] init]; 
} 
else if([elementName isEqualToString:@"media:thumbnail"]) { 
    if([attributeDict objectForKey:@"height"]==90) { 
     currentBright = [attributeDict objectForKey:@"url"]; 
     NSLog(@"Brightcove Url:%@", currentBright); 
    } 
} 
} 
+0

非常感谢!那让我在最后一个小时感到困惑。 – 2013-03-15 20:47:14

0

你永远不会打你的第二或第三个条件,因为elementName如何在不进阶的情况下改变?相反,您应该取消嵌套您的条件。

眼下发生的事情是:

-didStartTag

的ElementName =项目 - >第一condtional命中 - >失败第二

-didStartTag

的ElementName =标题 - >失败第一conditonal

etc ....

+0

感谢您的回复。我仍然无法使它工作。请检查我的编辑。 – 2013-03-15 20:19:18

+0

您正在检查90?你不应该检查“身高”吗? – Max 2013-03-15 20:24:51

+0

是的,我刚刚纠正了这一点。但我仍然没有运气 – 2013-03-15 20:32:33