2014-06-16 137 views
0

在我的应用程序中,我从Wordpress RSS提要的XML解析数据,例如“title”,“link”,“pubDate”和“description”。在RSS提要的描述中,有特定图像的链接,随后是描述。我只想在文本字段中输入描述,然后在图像视图中显示图像。唯一的问题是,我应该在我现有的NSXMLParser中实现一个HTML解析器,还是有一个更简单的方法?这可以在NSXMLParser本身内完成吗?解析RSS提要的描述

XML:

<item> 
<title>Back-to-school issue of Blue and Gold in the mail</title> 
<link>http://cazhigh.com/caz/gold/?p=2896</link> 
<comments>http://cazhigh.com/caz/gold/?p=2896#comments</comments> 
<pubDate>Thu, 29 Aug 2013 12:35:40 +0000</pubDate> 
<dc:creator>...</dc:creator> 
<category>...</category> 
<category>...</category> 
<category>...</category> 
<guid isPermaLink="false">http://cazhigh.com/caz/gold/?p=2896</guid> 
<description> 
<![CDATA[ 
<img width="150" height="150" src="http://cazhigh.com/caz/gold/wp-content/uploads/2013/08/BluGold_BacktoSchool2013_cover-150x150.jpg" class="attachment-thumbnail wp-post-image" alt="Blue and Gold (Back to School 2013)" style="display: block; margin-bottom: 5px; clear:both;" />Be on the lookout for the September 2013 edition of the Blue and Gold newsletter, which should be arriving in the mail soon. Included in the newsletter are district policies and notifications that we urge you to review, become familiar with and keep for your reference throughout the school year. The issue also provides some [&#8230;] 
]]> 
</description> 
<content:encoded> 
<![CDATA[ 
<img width="150" height="150" src="http://cazhigh.com/caz/gold/wp-content/uploads/2013/08/BluGold_BacktoSchool2013_cover-150x150.jpg" class="attachment-thumbnail wp-post-image" alt="Blue and Gold (Back to School 2013)" style="display: block; margin-bottom: 5px; clear:both;" /><div id="attachment_2898" style="width: 241px" class="wp-caption alignright"><a href="http://cazhigh.com/caz/gold/wp-file-browser-top/blueandgold/Blue%20and%20Gold%20(September%202013)"><img class="size-medium wp-image-2898 " alt="Blue and Gold (Back to School 2013)" src="http://cazhigh.com/caz/gold/wp-content/uploads/2013/08/BluGold_BacktoSchool2013_cover-231x300.jpg" width="231" height="300" /></a><p class="wp-caption-text">Blue and Gold (Back to School 2013)</p></div> <p itemprop="name"><span style="font-size: 13px;">Be on the lookout for the September 2013 edition of the Blue and Gold newsletter, which should be arriving in the mail soon. </span></p> <div itemprop="description articleBody"> <p>Included in the newsletter are district policies and notifications that we urge you to review, become familiar with and keep for your reference throughout the school year.</p> <p>The issue also provides some updates on work undertaken in Cazenovia schools — on everything from curricula to facilities — over the summer break, as well as &#8220;welcome back&#8221; messages from Superintendent of Schools Robert S. Dubik, Cazenovia High School Principal Eric Schnabl and Assistant Principal Susan Vickers, Cazenovia Middle School Principal Jean Regan and Burton Street Elementary Principal Mary-Ann MacIntosh.</p> <p>If you have questions related to the policies or notifications included in the newsletter, please call the district office at (315) 655-1317.</p> <p>The newsletter is also <span style="color: #000080;"><a title="link to Blue and Gold (September 2013)" href="http://cazhigh.com/caz/gold/wp-file-browser-top/blueandgold/Blue%20and%20Gold%20(September%202013)" target="_blank"><span style="color: #000080;"><b>available online</b></span></a></span>.</p> </div> 
]]> 
</content:encoded> 
<wfw:commentRss>http://cazhigh.com/caz/gold/?feed=rss2&p=2896</wfw:commentRss> 
<slash:comments>0</slash:comments> 
</item> 

现有的NSXMLParser代码:

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

    classelement=elementName; 

    if([elementName isEqualToString:@"item"]) 
    { 
     itemselected=YES; 
     mutttitle=[[NSMutableString alloc] init]; 
     mutstrlink=[[NSMutableString alloc] init]; 
     mutstrdate=[[NSMutableString alloc] init]; 
     mutstrdesc=[[NSMutableString alloc] init]; 
    } 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName; 
{ 
    if([elementName isEqualToString:@"item"]) 
    { 
     itemselected=NO; 

     [titarry addObject:mutttitle]; 
     [linkarray addObject:mutstrlink]; 
     [datearray addObject:mutstrdate]; 
     [descarray addObject:mutstrdesc]; 

    } 

} 


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string; 
{ 
    if (itemselected) 
    { 

     if ([classelement isEqualToString:@"title"]) 
     { 
      [mutttitle appendString:string]; 
     } 
     else if ([classelement isEqualToString:@"link"]) 
     { 
      [mutstrlink appendString:string]; 
     } 
     else if ([classelement isEqualToString:@"pubDate"]) 
     { 
      [mutstrdate appendString:string]; 
     } 
     else if ([classelement isEqualToString:@"description"]) 
     { 
      [mutstrdesc appendString:string]; 
     } 

    } 
} 

回答

2

在这里你去

NSString *string = @"<![CDATA[<img width=\"150\" height=\"150\" src=\"http://cazhigh.com/caz/gold/wp-content/uploads/2013/08/BluGold_BacktoSchool2013_cover-150x150.jpg\" class=\"attachment-thumbnail wp-post-image\" alt=\"Blue and Gold (Back to School 2013)\" style=\"display: block; margin-bottom: 5px; clear:both;\" />Be on the lookout for the September 2013 edition of the Blue and Gold newsletter, which should be arriving in the mail soon. Included in the newsletter are district policies and notifications that we urge you to review, become familiar with and keep for your reference throughout the school year. The issue also provides some [&#8230;]]]>"; 

NSScanner *scanner = [NSScanner scannerWithString:string]; 
NSString *imageString, *otherSthing, *descriptionString; 
[scanner scanUpToString:@"src=\"" intoString:nil]; 
[scanner scanString:@"src=\"" intoString:nil]; 
[scanner scanUpToString:@"\"" intoString:&imageString]; 
[scanner scanUpToString:@"]]>" intoString:&otherSthing]; 
descriptionString = [otherSthing componentsSeparatedByString:@">"].lastObject; 

现在和imagestring为http://cazhigh.com/caz/gold/wp-content/uploads/2013/08/BluGold_BacktoSchool2013_cover-150x150.jpg

descriptionString is Be on the lookout for the September 2013 edition of the Blue and Gold newsletter, which should be arriving in the mail soon. Included in the newsletter are district policies and notifications that we urge you to review, become familiar with and keep for your reference throughout the school year. The issue also provides some [&#8230;]