Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 我是否以最佳方式解析html源代码?_Objective C_Parsing_Nsstring_Performance - Fatal编程技术网

Objective c 我是否以最佳方式解析html源代码?

Objective c 我是否以最佳方式解析html源代码?,objective-c,parsing,nsstring,performance,Objective C,Parsing,Nsstring,Performance,我想从a中提取正文段落并将其存储到字符串中 首先,我使用 NSString *sourceCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:currentLink] encoding:NSUTF8StringEncoding error:&error]; 正文段落开始于之后,结束于 所以我打算像这样把绳子分开 NSString *startingPt = @"<!-- (START) Pagination

我想从a中提取正文段落并将其存储到字符串中

首先,我使用

NSString *sourceCode = [NSString stringWithContentsOfURL:[NSURL URLWithString:currentLink] encoding:NSUTF8StringEncoding error:&error];
正文段落开始于
之后,结束于

所以我打算像这样把绳子分开

NSString *startingPt = @"<!-- (START) Pagination Content Wrapper -->";
NSString *endingPt = @"<!-- (END) Pagination Content Wrapper -->";

NSString *sub = [sourceCode substringFromIndex:NSMaxRange([str rangeOfString:startingPt])];
sub = [sourceCode substringToIndex:[s rangeOfString:endingPt].location;
NSString*startingPt=@”;
NSString*endingPt=@;
NSString*sub=[sourceCode substringfromfromindex:NSMaxRange([str rangeOfString:startingPt]);
sub=[sourceCode substringToIndex:[s rangeOfString:endingPt]。位置;
然后我将使用
stringByReplacingOccurrencesOfString:with字符串:
将剩余的html标记替换为
@“


有更好的方法来实现我的目标吗?

在获得子字符串删除开始和结束后,您可以简单地使用转义html标记,这是实现html编码、解码等的一个非常好的类别,主要是您可以将其用于NSString实例,无需为此创建单独的对象

在这里你可以找到更多关于它的讨论

这些是在那篇文章中建议的方法&我喜欢

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;

您必须在删除HTML标记之前找到它们。除非您知道此系统需要使用的标记数量有限,否则不应在代码中硬编码它们的列表。使用-stringByReplacingOccurrences…,您需要一个精确的字符串,包含所有参数ID和类标记等。,这使得它更容易改变

除非您打算使用vishy建议的第三方扩展,看起来它可以满足您的需要,否则您必须执行以下操作:

1) 查找“”的第一个匹配项

4) 看看那是不是逃脱了

5) 如果没有,请为标记(从“”)创建NSRange,并使用-stringByReplacingCharactersInRange将其删除


6) 重复此操作,直到找不到任何未替换的“如您所述,存在随机数量的空白。是否无法消除它们?请使用[myString stringByTrimmingCharactersInSet:[NSCharacterSet Whitespace and NewLineCharacterSet]];我已经补充了这一点。它只删除了正文开头之前和之后的空格,而不删除段落之间的空格