过滤来自mediawiki api ios的数据

时间:2013-07-24 10:34:42

标签: iphone ios objective-c mediawiki wikipedia

我使用了“action = query& prop = revisions& rvprop = content& titles =%@& format = json& redirects”api来获取有关Anil_Ambani的详细信息。作为回应,我得到了以下字典

<i> query =     {
    normalized =         (
                    {
            from = "Anil_Ambani";
            to = "Anil Ambani";
        }
    );
    pages =         {
        1222313 =             {
            ns = 0;
            pageid = 1222313;
            revisions =                 (
                                    {
                    "*" = "{{BLP sources|date=June 2012}}\n{{Infobox person\n| name                     = Anil Ambani \n| image            =AnilAmbani.jpg\n| image_size       = \n| caption              = Ambani in 2009\n| birth_date       = {{Birth date and age|1959|6|4|df=y}}\n| birth_place      = [[Mumbai]], [[Maharashtra]], [[India]]\n| nationality      = Indian\n| occupation       = Chairman of [[Anil Dhirubhai Ambani Group]] \n| networth         = {{loss}} [[United States dollar|$]]5.2 billion (2012)<ref name=\"forbes.com\">[http://www.forbes.com/profile/anil-ambani/.] Forbes.com. Retrieved April 2013.</ref> \n| residence        = Mumbai, Maharashtra, India\n| alma_mater       = [[Warwick Business School]]<br />[[Wharton School of the University of Pennsylvania|The Wharton School]]\n| parents          = [[Dhirubhai Ambani]]<br>Kokilaben Ambani\n| brother          = [[Mukesh Ambani]]\n| spouse           = [[Tina Ambani]]\n|

”的值是 NSString 。 “”的值是

<i>$3 = 0x0755bb50 {{BLP sources|date=June 2012}}
{{Infobox person
| name             = Anil Ambani 
| image            =AnilAmbani.jpg
| image_size       = 
| caption          = Ambani in 2009
| birth_date       = {{Birth date and age|1959|6|4|df=y}}
| birth_place      = [[Mumbai]], [[Maharashtra]], [[India]]
| nationality      = Indian</i>

现在我想过滤字符串以获取名称,birth_date等。我试过

<i>NSArray *arr=[htmlSrc componentsSeparatedByString:@"|"]
for (int i=2; i<mutArr.count; i++)
{
 NSArray *DictKeyValueArray=[str componentsSeparatedByString:@"="];
 [mainDict setObject:[DictKeyValueArray objectAtIndex:1] forKey:[DictKeyValueArray    objectAtIndex:0]];
}

但是在birth_date之后它崩溃了。因为有“|”出生日期和年龄后。所以我不会在birth_date之后获得任何键值对。

请建议我过滤字符串的其他方法。

1 个答案:

答案 0 :(得分:0)

您获得的答案是字典形式。然后,您正在检索键“*”的值,它基本上是一个字符串。但是,该字符串包含 HTML值。此HTML主要用于在我们的应用中显示 UIWebView 中的内容。

现在,为了你的问题获得特定键的值,即name,birth_date等:-
我们得到的HTML字符串不明确,因为它会在您更改输入字(搜索的单词)时更改,此处输入的单词是Anil Ambani,但它可以是任何内容,因此响应和HTML值。<登记/> 因此,我认为没有任何明确的方法来获取特定密钥的值。

更新: -
要获得两个子字符串之间的子字符串,可以使用: -

-(NSString*)useScannerToGetSubstring:(NSString*)strYourString StartString:(NSString*)startString  EndString:(NSString*)endString
{
    NSString * strTest = strYourString;
    NSMutableArray *substrings = [NSMutableArray new];
    NSScanner *scanner = [NSScanner scannerWithString:strTest];
    [scanner scanUpToString:startString intoString:nil]; 
    while(![scanner isAtEnd]) {
        NSString *substring = nil;
        [scanner scanString:startString intoString:nil]; 
        if([scanner scanUpToString:endString intoString:&substring]) {
            [substrings addObject:substring];
        }
        [scanner scanUpToString:startString intoString:nil];
    }
    if ([substrings count]>0) 
    {
        return [substrings objectAtIndex:0];
    }
    return nil;
}