2013-05-06 27 views
0

这里通过Web服务收到了我的XML ..问题与XML解析使用正则表达式

<?xml version="1.0" encoding="utf-8"?> 
<Quotes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://swanandmokashi.com"> 
    <QuoteOfTheDay>Hit any user to continue.</QuoteOfTheDay> 
    <Author>Fuzzel Fish Administration Page</Author> 
</Quotes> 

和IM试图通过这在我的connectionDidFinishLoading解析它:...

{    
webData_str=[[NSString alloc]initWithData:webData encoding:NSUTF8StringEncoding]; 
NSString *pattern = @"<QuoteOfTheDay>(.*)</QuoteOfTheDay><Author>(.*)</Author>"; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern 
         options:NSRegularExpressionCaseInsensitive                   error:nil]; 

__block NSString *QuoteString,*author= nil; 

[regex enumerateMatchesInString:webData_str options:0 range:NSMakeRange(0, [webData_str length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop) { 

    // not executing... 

    if (0 < [match numberOfRanges]) { 
     NSRange range = [match rangeAtIndex:1]; 
     QuoteString = [webData_str substringWithRange:range]; 


     NSRange range1 = [match rangeAtIndex:2]; 
     author = [webData_str substringWithRange:range1];   

    } 
}];   

final=[NSString stringWithFormat:@"\n%@\n%@",QuoteString,author]; 
NSLog(@"Final--- %@",final); 
} 

什么是错的这个? ,执行流程不会在块内。

回答

2

更好的解决方案是使用XML解析器(例如NSXMLParser)而不是常规的 表达式。

但要回答您的具体问题:您的正则表达式与</QuoteOfTheDay><Author>之间的空白(换行符和空格)不匹配。如果将图案更改为

NSString *pattern = @"<QuoteOfTheDay>(.*)</QuoteOfTheDay>\\s*<Author>(.*)</Author>"; 

您将获得预期的输出。

+0

完美..感谢..是NSXMlParser会更好的选择,但作为标签数只有两个我会选择正则表达式.. – BaSha 2013-05-06 08:19:11