基于OC的HTML解析4—获得指定标签的层次结构
2015-08-17 19:51
525 查看
在ios开发过程中难免会遇到要求处理网络数据,而对于处理下载下来的HTML文件,对其进行解析,查找需要的指定标签并获得其属性,或者要求求得该标签的层次结构。
1 在上述基础上要想获得指定标签的AHP 需要用到栈的思想,首先将标签数组依次入栈 对栈顶元素进行判断,判断其是否为指定标签的结束标签,若为结束标签 则出栈至指定标签,至栈顶输出标签至栈底。若不为指定标签的结束标签,则进行出栈操作至该结束标签的起始标签。
NSString *AHPAll(NSMutableArray * marr,NSString *strinput)
{
NSMutableArray * marrStack = [[NSMutableArray alloc] init];
NSMutableString *mstr = [[NSMutableString alloc] init];
NSMutableArray * marrAHP = [[NSMutableArray alloc] init];
int top = -1;
for (int i = 0; i < [marr count]; i++) {
NSString *strLabel = [marr objectAtIndex:i];
if([strLabel characterAtIndex:0] == '/')
{
NSString *strLabelFirst = [[strLabel componentsSeparatedByString:@"/"] objectAtIndex:1];
int count = 1;
while ( count != 0) {
NSString *strtemp = [marrStack objectAtIndex:top];
top -- ;
if([strtemp isEqualToString:strLabelFirst ] == YES)
{
count -- ;
}
else if ([strtemp isEqualToString:strLabel] == YES)
{
count++;
}
}
}
else if([strLabel isEqualToString:strinput] == YES)
{
int toptemp = top;
while (toptemp!=-1) {
NSString *strtemp = [marrStack objectAtIndex:toptemp];
toptemp -- ;
[marrAHP addObject:strtemp];
}
NSMutableString * mstrtemp = [[NSMutableString alloc] init];
for (int i = (int)[marrAHP count] - 1; i >=0 ; i--) {
[mstrtemp appendFormat:@"%@|",[marrAHP objectAtIndex:i]];
}
[mstrtemp appendString:strinput];
[mstr appendFormat:@"%@\n",mstrtemp];
top++;
[marrStack setObject:strLabel atIndexedSubscript:top];
marrAHP = [[NSMutableArray alloc] init];
}
else{
top++;
[marrStack setObject:strLabel atIndexedSubscript:top];
}
}
return mstr;
}
1 在上述基础上要想获得指定标签的AHP 需要用到栈的思想,首先将标签数组依次入栈 对栈顶元素进行判断,判断其是否为指定标签的结束标签,若为结束标签 则出栈至指定标签,至栈顶输出标签至栈底。若不为指定标签的结束标签,则进行出栈操作至该结束标签的起始标签。
NSString *AHPAll(NSMutableArray * marr,NSString *strinput)
{
NSMutableArray * marrStack = [[NSMutableArray alloc] init];
NSMutableString *mstr = [[NSMutableString alloc] init];
NSMutableArray * marrAHP = [[NSMutableArray alloc] init];
int top = -1;
for (int i = 0; i < [marr count]; i++) {
NSString *strLabel = [marr objectAtIndex:i];
if([strLabel characterAtIndex:0] == '/')
{
NSString *strLabelFirst = [[strLabel componentsSeparatedByString:@"/"] objectAtIndex:1];
int count = 1;
while ( count != 0) {
NSString *strtemp = [marrStack objectAtIndex:top];
top -- ;
if([strtemp isEqualToString:strLabelFirst ] == YES)
{
count -- ;
}
else if ([strtemp isEqualToString:strLabel] == YES)
{
count++;
}
}
}
else if([strLabel isEqualToString:strinput] == YES)
{
int toptemp = top;
while (toptemp!=-1) {
NSString *strtemp = [marrStack objectAtIndex:toptemp];
toptemp -- ;
[marrAHP addObject:strtemp];
}
NSMutableString * mstrtemp = [[NSMutableString alloc] init];
for (int i = (int)[marrAHP count] - 1; i >=0 ; i--) {
[mstrtemp appendFormat:@"%@|",[marrAHP objectAtIndex:i]];
}
[mstrtemp appendString:strinput];
[mstr appendFormat:@"%@\n",mstrtemp];
top++;
[marrStack setObject:strLabel atIndexedSubscript:top];
marrAHP = [[NSMutableArray alloc] init];
}
else{
top++;
[marrStack setObject:strLabel atIndexedSubscript:top];
}
}
return mstr;
}
相关文章推荐
- android wifi 无线调试
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 我是运营,我没有假期
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 拨号网络的简单知识
- 菜鸟必看网络名词
- 通晓网络测试常用命令
- 网络路由技术及运用2
- IP网络路由技术
- 网络防火墙的设置技巧
- 网络管理之IP地址篇
- 网络路由技术及运用3
- DB2数据库的安装
- C#实现把指定数据写入串口