2014-11-06 7 views
0

Я получаю информацию о погоде от yahoo weather и я в состоянии анализировать данные температуры из документа, но имеющие проблемы для извлечения URL изображения из <escription> элемента т.е.Как получить URL-адрес изображения из XML-документа прогноза погоды Yahoo?

<description> 
<![CDATA[ 
<img src="http://l.yimg.com/a/i/us/we/52/28.gif"/><br /> <b>Current Conditions:</b><br /> Mostly Cloudy, 61 F<BR /> <BR /><b>Forecast:</b><BR /> Thu - Showers. High: 66 Low: 48<br /> Fri - AM Light Rain. High: 52 Low: 37<br /> Sat - Partly Cloudy. High: 61 Low: 47<br /> Sun - AM Clouds/PM Sun. High 
]]> 
<![CDATA[ 
: 66 Low: 48<br /> Mon - PM Showers. High: 62 Low: 50<br /> <br /> <a href="http://us.rd.yahoo.com/dailynews/rss/weather/Hakuba_Station__JP/*http://weather.yahoo.com/forecast/JAXX0105_f.html">Full Forecast at Yahoo! Weather</a><BR/><BR/> (provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/> 
]]> 
</description> 

Пожалуйста, не то, что я использую NSXMLParser для разбора Документ MXL.

ответ

1

на основе @ haras.prasad ответ я решил эту проблему, используя NSXMLParser делегат и NSRegularExpression

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock { 
    NSString *cdataString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; 
    // Do extraction of image src here 
    NSError* error; 
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>)+?" 
                      options:NSRegularExpressionCaseInsensitive 
                      error:&error]; 

    NSString *imageUrlString = nil; 
    NSTextCheckingResult *match = [regex firstMatchInString:cdataString options:0 range:NSMakeRange(0, [cdataString length])]; 
    if (match) 
    { 
     imageUrlString = [cdataString substringWithRange:[match rangeAtIndex:2]]; 

     self.iconUrl = imageUrlString; 
    } 

} 
+0

Я думаю, что это сработает .. :) –

+0

yup Я получаю это work..thanks приятель. – Blios

0

Вы можете получить CDATA строку:

NSString *prefix = @"<![CDATA["; 
if ([xmlString hasPrefix:prefix]) { 
    NSString *cdataString = [_factString substringWithRange:NSMakeRange((prefix.length+1), xmlString.length - 3 -(prefix.length+1))]; 
    // Do stuff with CDATA here... 
    NSLog(@"%@", cdataString); 
} 
1

В вашем NSXMLParserDelegate, вы можете вызвать метод делегата foundCDATA и обрабатывать данные там.

- (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock { 
     NSString *cdataString = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding]; 
     // Do extraction of image src here 
} 

Вы можете проверить документацию по методу делегата здесь: NSXMLParserDelegate

+0

мне нужно разобрать html, чтобы получить img src? Если да, пожалуйста, дайте мне ссылку на то, как это сделать? – Blios

+0

Вам все еще нужен метод парсера? –