簡體   English   中英

如何在Objective-C中解析HTML響應?

[英]How do I parse an HTML response in Objective-C?

如何在Objective-C中解析HTML響應,以找到嵌入在HTML中的JSON對象。

這是我得到的回應...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1"><title>
<script src="/Scripts/LocalLogin_vv1CC4D69C143F4D6.js" type="text/javascript"></script>
<script type="text/javascript">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv=X-UA-Compatible content=IE=EmulateIE7 />
<title></title>

<script type="text/javascript" language="javascript">


FRAME_API = new FrameApi({
userId: '2269113',
proxyUserId: '2269113',
isProxy: false,
username: 'inst1',
enrollments: [{id: '2366888', userId: '2269113'}],

viewAda: false,

// Strings
I18N : {
    ItemViewerFrame: 'Item Viewer Frame',
    ItemEditorFrame: 'Item Editor Frame',
    GroupSetupFrame: 'Group Setup Frame',
    notLoggedIn: 'You are no longer logged in.\<br /\>Please click {0} now.',
    notConnected: 'You have been disconnected.\<br /\>Please connect and click {0}.',
    login: 'Login'
}
});
Ext.onReady(function() {
if (typeof (Ext.QuickTips) != 'undefined') {
    Ext.QuickTips.init();
}
var parentApi = FRAME_API.findParentApi(window);
if(parentApi != null) {
    FRAME_API = parentApi;
}
else {
    FRAME_API.init(15);
}
});
</script>
</head>
</body>
</html>

現在,我如何掌握以下內容:

enrollments: [{id: '2366888', userId: '2269113'}]

並使其成為json對象,以便我可以檢索userId?

PS:我已經將響應存儲在NSString對象中了。

提前致謝!!!


因此,我嘗試了以下方法:

NSString* regexString =@"enrollments: \[.*?\],";
NSRegularExpressionOptions options = NSRegularExpressionCaseInsensitive;
NSError* regExerror = NULL;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:regexString options:options error:&regExerror];
if (regExerror) {
    NSLog(@"%@", [regExerror description]);
}

    //store the response from the server - HTML FORMAT
NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];


NSString* loginResponse = [[[NSString alloc] initWithData:data encoding: NSASCIIStringEncoding] autorelease];

NSArray* results = [regex matchesInString:loginResponse options:0 range:NSMakeRange(0, [loginResponse length])];
for (NSTextCheckingResult* result in results) {

    NSString* resultString = [loginResponse substringWithRange:result.range];
    NSLog(@"%@",resultString);
}

但是什么也沒存儲在一個數組中……我在幾個具有不同響應部分的在線測試儀上測試了regex,並且效果很好……這是我第一次使用regex。 我已經在類參考中查找了,似乎“ SHOULD”工作正常...

有任何想法嗎? 謝謝!!! :D

如果您的目標不是iOS4 +,則可以使用NSScanner。 根據頁面呈現的可靠性,您可以使用類似

NSScanner* scanner = [NSScanner scannerWithString:yourStringHere];
NSString* targetString; //your JSON ends up here
[scanner scanUpToString:@"enrollments: " intoString:NULL];
[scanner scanUpToString:@"\n" intoString:&targetString];

但是,如果您可以使用iOS4 +,則我非常同意j0k認為NSRegularExpression是可行的方法。 如果您不熟悉正則表達式,我建議的模式類似於@"enrollments: \\[.*?\\],"以匹配整個字符串,或者看起來非常可靠(例如,始終一個具有一個具有這些確切屬性的對象的數組,您可以嘗試@"enrollments: [{id: '(\\d+?)', userId: '(\\d+?)'}]"

另一方面,第一個更加靈活,您可以輕松使用Nextive JSON之類的內容對其進行解析。

如果您正在為iOS4 +開發,並且每次都在尋找相同的模式,那么我會考慮使用NSRegularExpression

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM