如何解析HTML文件?
我在下面的代码中得到一个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>
有什么想法吗?提前谢谢。
答案 0 :(得分:1)
你需要和XML解析器。
有一个教程here
答案 1 :(得分:1)
您可以使用此代码
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 强>
答案 2 :(得分:0)
对于这种特殊情况,您可以获得<wsse:BinarySecurityToken>
和</wsse:BinarySecurityToken>
的范围,构建将为您提供令牌位置的新范围,并获取该范围内的子字符串。
示例代码:
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];
由于您的输入来自外部,您应该检查范围的位置是否不等于NSNotFound。
答案 3 :(得分:0)
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);
}
}
希望这可以帮助您For more try this blog和Git Project Resource may help you 和 Good blog by 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;
}