如何parsingios中的HTML内容?
如何parsingHTML文件?
我在下面的代码中获取一个HTML文件,我只想获取BinarySecurityToken XML节点之间的数据。
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { if(_data) { //Here am getting the below HTML content NSString* content = [[NSString alloc] initWithData:_data encoding:NSUTF8StringEncoding]; } } <input type="hidden" name="wa" value="wsignin1.0" /> <input type="hidden" name="wresult" value="<t:RequestSecurityTokenResponse xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust"> <t:Lifetime> <wsu:Created >2013-04-29T11:50:29.895Z</wsu:Created> <wsu:Expires>2013-04-29T12:00:29.895Z</wsu:Expires> </t:Lifetime> <wsp:AppliesTo> <EndpointReference> <Address>urn:orin.converse</Address> </EndpointReference></wsp:AppliesTo> <t:RequestedSecurityToken> <wsse:BinarySecurityToken> aHR0cCUzYSUyZiUyZnNjaGVtYWd0Sjk0JTNk </wsse:BinarySecurityToken>
有任何想法吗? 提前致谢。
你可以使用这个代码
NSRange divRange = [content rangeOfString:@"<wsse:BinarySecurityToken>" options:NSCaseInsensitiveSearch]; if (divRange.location != NSNotFound) { NSRange endDivRange; endDivRange.location = divRange.length + divRange.location; endDivRange.length = [content length] - endDivRange.location; endDivRange = [content rangeOfString:@"</wsse:BinarySecurityToken>" options:NSCaseInsensitiveSearch range:endDivRange]; if (endDivRange.location != NSNotFound) { divRange.location += divRange.length; divRange.length = endDivRange.location - divRange.location; NSLog(@"BinarySecurityToken : %@",[content substringWithRange:divRange]); } }
输出:aHR0cCUzYSUyZiUyZnNjaGVtYWd0Sjk0JTNk
你需要和XMLparsing器。
这里有一个教程
对于这个特殊情况,你可以得到<wsse:BinarySecurityToken>
和</wsse:BinarySecurityToken>
范围,构造一个新的范围,为你提供token的位置,并获取该范围的子串。
示例代码:
NSRange openingTagRange = [htmlString rangeOfString:@"<wsse:BinarySecurityToken>"]; NSRange closingTagRange = [htmlString rangeOfString:@"</wsse:BinarySecurityToken>"]; NSRange tokenRange = NSMakeRange(openingTagRange.location + openingTagRange.length, closingTagRange.location - (openingTagRange.location + openingTagRange.length)); NSString *token = [htmlString substringWithRange:tokenRange];
由于您的input来自外部,您应该检查范围的位置是否不等于NSNotFound。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"]; NSData * data = [NSData dataWithContentsOfFile:filePath]; TFHpple * tutorialsParser = [[TFHpple alloc] initWithHTMLData:data]; NSString *query = @"//div[@id='BinarySecurityToken']"; NSArray *nodes = [tutorialsParser searchWithXPathQuery:query]; for (TFHppleElement * element in nodes) { NSLog(@"%@", element); NSLog(@"%@", [element tagName]); NSLog(@"%@", [element attributes]); NSLog(@"%@", [element children]); for (TFHppleElement *childElement in [element children]) { NSLog(@"%@", childElement); } }
希望这会帮助你更多的尝试这个博客和Git Project Resource可以帮助你和RAYWENDERLICH的好博客
或另一个选项,如果你有NSString
所有HTML数据,你可以使用这个函数在特定的NSString
之间获取数据。
-(NSString*)stringBetweenString:(NSString*)start andString:(NSString)end { NSRange startRange = [self rangeOfString:start]; if (startRange.location != NSNotFound) { NSRange targetRange; targetRange.location = startRange.location + startRange.length; targetRange.length = [self length] - targetRange.location; NSRange endRange = [self rangeOfString:end options:0 range:targetRange]; if (endRange.location != NSNotFound) { targetRange.length = endRange.location - targetRange.location; return [self substringWithRange:targetRange]; } } return nil; }