2010-02-11 21 views
7

Tôi có một chuỗi được phân tích cú pháp một trang web xml.Url phân tích cú pháp iPhone cho các tham số GET

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

Tôi muốn có hàm NSString để có thể phân tích giá trị của c. Có chức năng mặc định không hoặc tôi có phải viết thủ công hay không.

+0

những gì bạn nghĩa là gì? – Zinc

Trả lời

22

Bạn có thể sử dụng biểu hiện thường xuyên qua RegExKit Lite: http://regexkit.sourceforge.net/RegexKitLite/

Hoặc bạn có thể tách chuỗi thành các thành phần (đó là chưa đẹp):

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

Cảm ơn .. Đây là những gì tôi đang cố gắng sử dụng. – Nareshkumar

+1

hoạt động cho đến khi giá trị tham số chứa '=' char, như LptOaQ == Để sử dụng thay vào đó 'NSString * value = [phần tử substringFromIndex: [phần tử rangeOfString: @" = "]. Location + 1]; NSString * variableKey = [phần tử substringToIndex: [phần tử rangeOfString: @ "="]. Vị trí]; ' – jold

+0

NSString * query = [url query]; là một chút sạch hơn để sử dụng sau đó tách bởi "?" ... nếu lastObject chứa một đoạn ("#fragment"), đối tượng cuối cùng khi tách bởi "&" sẽ không là những gì bạn đang mong đợi. – whyoz

0

Hãy thử như sau:

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

ý tưởng hay! rất đẹp. – ZYiOS

6

Tôi đã tạo một lớp phân tích cú pháp này cho bạn bằng cách sử dụng NSScanner, làm câu trả lời cho same question một vài ngày trước. Bạn có thể thấy nó hữu ích.

Bạn có thể dễ dàng sử dụng nó như:

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

Cảm ơn bạn đã chia sẻ điều này, đã làm việc như một sự quyến rũ! – aumanets

Các vấn đề liên quan