【问题标题】:hpple: is it possible to get text value like javascript textContenthpple:是否可以获取像 javascript textContent 这样的文本值
【发布时间】:2015-06-15 07:20:48
【问题描述】:

是否可以在hpple中递归只获取子元素的所有文本内容。 TFHppleElement 类中的任何方法? 比如javascript

document.getElementById("testdiv").textContent

【问题讨论】:

    标签: ios xml-parsing hpple


    【解决方案1】:

    我正在使用此代码获取新闻标题的所有内容

    NSURL *newURL = [NSURL URLWithString:@"http://somesite"];
            NSData *newsData = [NSData dataWithContentsOfURL: newURL];
    
            TFHpple *newsParser = [TFHpple hppleWithHTMLData: newsData];
    
            NSString *newsXpathQueryString = @"//div[@class='item column-1']";
            NSArray *newsNodes = [newsParser searchWithXPathQuery: newsXpathQueryString];
    
            NSMutableArray *newNews = [[NSMutableArray alloc] initWithCapacity: 0];
    
            for (TFHppleElement *element in newsNodes)
            {
                News *news = [[News alloc] init];
    
                [newNews addObject: news];
    
                news.title = [[element content] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    
                news.photo_url = [element objectForKey:@"src"];
    
                _allNews = newNews;
                [self.tableView reloadData];
            }
        }
    

    你可以使用

    news.title = [[element firstChild]content] to get children elements content
    

    【讨论】:

    • 谢谢。我想要类似下面的东西,我已经回答了。我知道第一个孩子,但我想要孩子的所有文本内容,比如'textContent'返回。内容在 div 和 span 中。
    【解决方案2】:

    我想要这样的东西 - 一个快速的样板代码,它不是 static contents 的优雅解决方案。请告诉我,如何改进:)

    #pragma mark - Hpple XML parser
    
    /* The documents contents lots of nested div, table, span, style etc. */
    - (NSString *) extractDefinition
    {
        NSString *html = [self.webView stringByEvaluatingJavaScriptFromString: @"document.getElementById('innerframe').innerHTML"];
        if ([Resources stringIsEmpty:html]) {
            return nil;
        }
    
        return [self extractSubDiv:html];
    }
    
    - (NSString *)extractSubDiv:(NSString *)html
    {
        TFHpple *hppleParser = [TFHpple hppleWithHTMLData:[html dataUsingEncoding:NSUTF8StringEncoding]];
    
        NSString * xpathQuery;
        xpathQuery = @"//div[@id='columnboth']";
        NSArray * defNodes = [hppleParser searchWithXPathQuery:xpathQuery];
        NSString * text = nil;
        if ([defNodes count] > 0) {
            TFHppleElement * element = [defNodes objectAtIndex:0];
            text = [self parseContents:element];
        } else {
            xpathQuery = @"//div[@id='columnsingle']";
            defNodes = [hppleParser searchWithXPathQuery:xpathQuery];
            if ([defNodes count] > 0) {
                TFHppleElement * element = [defNodes objectAtIndex:0];
                text = [self parseContents:element];
            }
        }
        return text;
    }
    
    - (NSString *) parseContents:(TFHppleElement *)element {
        NSArray * innhold = [element searchWithXPathQuery:@"//div[contains(@class,'articlecontents')]"];
        return [self getTextFromArray:innhold];
    }
    
    
    static NSMutableString * contents;
    
    - (NSString *) getTextFromArray:(NSArray *)hppleElments {
        NSMutableString * text = [[NSMutableString new] autorelease];
        contents = nil;
        contents = [[NSMutableString new] autorelease];
        for (TFHppleElement * e in hppleElments) {
            [text appendFormat:@"%@ ", [self getText:e]];
        }
        return text;
    }
    
    /* Here are more nested div and then span for text. */
    - (NSString *) getText:(TFHppleElement *)element
    {
        if ([element isTextNode]) {
            [contents appendFormat:@" %@", element.content];
        }
    
        for (TFHppleElement * e in element.children) {
            [self getText:e];
        }
    
        return contents;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-11-10
      • 1970-01-01
      • 2017-08-04
      • 2023-04-03
      • 2016-11-18
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多