我目前正在使用Hpple解析HTML,如下所示:
TFHpple *htmlParser = [TFHpple hppleWithHTMLData:[currentString dataUsingEncoding:NSUTF8StringEncoding]];
NSString *paragraphsXpathQuery = @"//p//text()";
NSArray *paragraphNodes = [htmlParser searchWithXPathQuery:paragraphsXpathQuery];
if ([paragraphNodes count] > 0) {
NSMutableArray *tempArray = [NSMutableArray array];
for (TFHppleElement *element in paragraphNodes) {
[tempArray addObject:[element content]];
}
article.paragraphs = tempArray;
}
这样我得到一个段落数组,我可以使用NSString *result = [myArray componentsJoinedByString:@"\n\n"];
将它编译成带有换行符的单个文本体。
但是,如果html包含标签,它们会被解释为单独的实体,并且会自行断行,所以在一天结束时从这样的行开始:
<p>I went to the <a href="blablabla.html">shop</a> to get some milk!</a></p>
<p>It was awesome.</p>
我明白了:
I went to the
shop
to get some milk!
It was awesome!
我当然希望得到这个(忽略p
标记内的其他标记):
I went to the shop to get some milk!
It was awesome!
你能帮助我吗?
答案 0 :(得分:2)
在XPath 1.0中,您可以分两步执行此操作:
选择所有p
元素://p
在每个选定的p
元素(用作初始上下文节点)上评估:string()
<强>解释强>:
根据定义,将标准XPath函数 string()
应用于元素的结果是其所有文本节点后代的串联(按文档顺序)。
答案 1 :(得分:2)
NSString *HTMLTags = @"<[^>]*>"; //regex to remove any html tag
NSString *htmlString = @"<html>bla bla</html>";
NSString *stringWithoutHTML = [hstmString stringByReplacingOccurrencesOfRegex:myregex withString:@""];
不要忘记将其包含在您的代码中:#import“RegexKitLite.h”这里是下载此API的链接:http://regexkit.sourceforge.net/#Downloads