Hpple,获得文字后

时间:2013-05-21 14:01:14

标签: html ios parsing hpple

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

我可以使用// div [@class ='entry-content'] / p获取正在使用“今天的项目”的文本。我还可以使用// div [@class ='entry-content'] //一个[@title] // *及其后的所有文本获取下一个标记。但是,正如您所看到的,在“/ span”之后仍然存在一些文本。但是,我尝试的任何东西都不会起作用。我试过看了元素的孩子,尝试了// div [@class ='entry-content'] / p // text(),// div [@class ='entry-content'] / p //以下:: *,没有任何作用。如果有人有任何想法,我全都耳朵!再次感谢您的所有时间。

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

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

编辑#3这是DOM树HTML的另一个屏幕截图。如果您注意到我正在解析div类“条目内容”,则会显示相关文本。从“今天......”开始,然后跨度改变文本的颜色,我可以得到那个文本。之后的文字,我需要,“它是一个.....”就在关闭p标签之前。

Dom Tree

我还将整个HTML放在gist上。 HERE。有问题的行是102.虽然HTML没有很好地复制。感谢。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

叫我一个" raw"但是你可以将代码读作一个直线字符串,然后通过你想要的标签将其整理成一个数组。这可以在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>"