2

所以我认为这是我最后一个 Hpple 问题!我在使用 Hpple 解析的 HTML 文档中找到了一个条目。我尝试了许多不同的查询,但没有运气。这是 HTML 的示例。HTML

我可以使用 //div[@class = 'entry-content']/p 获取以“Today's project”开头的文本。我还可以使用 //div[@class = 'entry-content']//a[@title]//* 以及它之后的所有文本来获取下一个标签。但是,如您所见,“/span”之后仍有一些文本。但是,我尝试过的任何方法都行不通。我试过查看元素的子元素,试过 //div[@class = 'entry-content']/p//text(), //div[@class = 'entry-content']/p//以下::*,没有任何效果。如果有人有任何想法,我全神贯注!!!再次感谢您的所有时间。

编辑#1 当我尝试不同的东西时,我正在查看 HTML。p 标签下是我需要的文本,“今天的项目......”然后有一个跨度更改文本颜色并包括一个链接,然后是更多文本。我需要做的是跳过那个跨度继续阅读文本。也许我的问题应该是,你如何跳过一个跨度?感谢您的关注。

编辑#2 好吧,我要开始赏金了。我真的需要一些帮助。我到处寻找,并尝试了很多不同的东西。但没有什么对我有用。在那一个封闭的跨度之后,我无法获得文本。而且这种格式经常出现。我正在为应用程序解析的博客的​​作者有时会更改她的文字样式,并且在她更改样式后我无法获取文本。任何帮助,将不胜感激。再次感谢您的关注。

编辑#3 这是 DOM 树 HTML 的另一个屏幕截图。如果你能注意到我正在解析 div 类的“条目内容”,那么有问题的文本就会暴露出来。以“今天...”开头,然后更改文本颜色的跨度,我可以得到该文本。我需要的是之后的文本,“它是一个......”就在关闭 p 标签之前。

大教堂树

我还将整个 HTML 放在了要点上。在这里。有问题的行是 102。虽然 HTML 没有很好地复制。谢谢。

4

2 回答 2

3

对代码进行一些更改以进一步了解层次结构,它适用于您的 html 示例。注意:我将所有条目内容附加到单个 NSMutableString 中以使其更容易。 就像我在评论中警告你一样,请谨慎使用。:-)

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]; 
NSData *data = [NSData dataWithContentsOfFile:filePath];
TFHpple *detailParser = [TFHpple hppleWithHTMLData:data];
NSString *xpathQueryString = @"//div[@class='entry-content']";
NSArray *node = [detailParser searchWithXPathQuery:xpathQueryString];

NSMutableString *test = [[NSMutableString alloc] initWithString:@""];

for (TFHppleElement *element in node) {
    for (TFHppleElement *child in element.children) {            
        if (child.content != nil) {
            [test appendString:child.content];
        }
        if ([child.children count]!= 0) {
            for (TFHppleElement *grandchild in child.children) {
                if (grandchild.content != nil) {
                    [test appendString:grandchild.content];
                 }
                for (TFHppleElement *greatgrandchild in grandchild.children) {
                    if (greatgrandchild.content != nil) {
                        [test appendString:greatgrandchild.content];
                    }
                    for (TFHppleElement *greatgreatgrandchild in greatgrandchild.children) {
                        if (greatgreatgrandchild.text != nil) {
                            [test appendString:greatgreatgrandchild.text];
                        }
                        if (greatgreatgrandchild.content != nil) {
                            [test appendString:greatgreatgrandchild.content];
                        }
                    }
                }
            }
        }
    }
}

NSLog(@"test = %@", test);
于 2013-05-27T19:51:24.067 回答
0

称我为“原始”人,但您可以将代码读取为一个直接的字符串,然后通过您要使用的标签将其分解为一个数组。这可以在 PHP/Javascript/etc 中完成。然后你可以拉出包含你正在寻找的文本的数组元素。不需要任何花哨/外部的东西。

例子:

$string = '<p>text is here</p><p>more text is here</p>';
$string = explode('<p>', $string);

Now $string = [0] => "text is here</p>", [1] => "more text is here</p>"
于 2013-05-23T15:04:16.313 回答