【问题标题】:filter data from mediawiki api ios过滤来自 mediawiki api ios 的数据
【发布时间】:2013-07-24 10:34:42
【问题描述】:

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

<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>

现在我想过滤字符串以获取姓名、出生日期等。我试过了

<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之后我不会得到任何键值对。

请给我一些其他过滤字符串的方法。

【问题讨论】:

    标签: iphone ios objective-c mediawiki wikipedia


    【解决方案1】:

    您得到的响应是字典形式的。然后,您将检索键 "*" 的值,它基本上是一个字符串。但是,该字符串包含 HTML 值。这个 HTML 主要是为了在我们的应用中显示 UIWebView 中的内容。

    现在,让您的问题获取特定键的值,即姓名、出生日期等:-
    我们得到的 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;
    }
    

    【讨论】:

    • 嘿 Piyush,感谢您的帮助。您编写的 NSScanner 方法运行良好。非常感谢。
    • @priyabagrecha,如果有任何答案对您有所帮助,请将其标记为正确或点赞,以便其他人也能从中受益。
    • 我没有资格为答案投票。而且您编写的 NSScanner 方法也不存在于答案中。昨天只有我抄了。但是今天我看不到那个答案。
    • 不知道你说的是哪种方法。但是,您可以使用此扫描仪方法从字符串中获取两个子字符串之间的子字符串。检查我更新的答案。
    猜你喜欢
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    相关资源
    最近更新 更多