4

我目前正在使用 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!

你能帮我吗?

4

2 回答 2

2

在 XPath 1.0 中,您可以分两步执行此操作

  1. 选择所有p元素://p

  2. 在每个选定p的元素(用作初始上下文节点)上评估:string()

说明

根据定义,将标准 XPath 函数string()应用于元素的结果是其所有文本节点后代的串联(按文档顺序)。

于 2012-09-14T13:23:04.983 回答
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

于 2012-09-14T13:48:22.433 回答