2010-02-11 14 views
7

Ho una stringa ottenuta dall'analisi di un sito xml.url di parsing iPhone per i parametri GET

http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500 

Voglio avere una funzione NSString che sarà in grado di analizzare il valore di c. Esiste una funzione predefinita o devo scriverla manualmente.

+0

Che cosa vuoi dire? – Zinc

risposta

22

Si potrebbe usare espressioni regolari via RegExKit Lite: http://regexkit.sourceforge.net/RegexKitLite/

Oppure si potrebbe separare la stringa in componenti (che è meno bello):

NSString *[email protected]"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500"; 
NSArray *comp1 = [url componentsSeparatedByString:@"?"]; 
NSString *query = [comp1 lastObject]; 
NSArray *queryElements = [query componentsSeparatedByString:@"&"]; 
for (NSString *element in queryElements) { 
    NSArray *keyVal = [element componentsSeparatedByString:@"="]; 
    if (keyVal.count > 0) { 
     NSString *variableKey = [keyVal objectAtIndex:0]; 
     NSString *value = (keyVal.count == 2) ? [keyVal lastObject] : nil; 
    } 
} 
+0

Grazie .. Questo è quello che sto cercando di usare. – Nareshkumar

+1

funziona finché il valore del parametro non contiene il carattere '=', come LptOaQ == Per tale uso invece 'NSString * value = [element substringFromIndex: [element rangeOfString: @" = "]. Location + 1]; NSString * variableKey = [element substringToIndex: [element rangeOfString: @ "="]. Location]; ' – jold

+0

NSString * query = [url query]; è un po 'più pulito da usare e quindi separa con "?" ... se lastObject contiene un frammento ("#fragment"), l'ultimo oggetto quando si separa da "&" non sarebbe quello che si aspetta. – whyoz

0

Provare quanto segue:

NSURL *url = [NSURL URLWithString:@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500"]; 
NSMutableString *parameterString = [NSMutableString stringWithFormat:@"{%@;}",[url parameterString]]; 
[parameterString replaceOccurrencesOfString:@"&" withString:@";"]; 
// Convert string into Dictionary 
NSPropertyListFormat format; 
NSString *error;  
NSDictionary *paramDict = [NSPropertyListSerialization propertyListFromData:[parameterString dataUsingEncoding:NSUTF8StringEncoding] mutabilityOption: NSPropertyListImmutable format:&format errorDescription:&error]; 

// Now take the parameter you want 
NSString *value = [paramDict valueForKey:@"c"]; 
+0

buona idea! molto bella. – ZYiOS

6

Ho creato una classe che esegue questa analisi per l'utente utilizzando NSScanner come risposta allo same question pochi giorni fa. Potresti trovarlo utile

Si può facilmente utilizzare le cose come:

URLParser *parser = [[[URLParser alloc] initWithURLString:@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500"] autorelease]; 
    NSString *c = [parser valueForVariable:@"c"]; //c=500 
+0

Grazie per aver condiviso questo, ha funzionato come un fascino! – aumanets