如何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; } 
    Interesting Posts