首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TFHpple/hpple (IOS)从HTML页面解析部分

使用TFHpple/hpple (IOS)从HTML页面解析部分
EN

Stack Overflow用户
提问于 2012-12-07 22:41:43
回答 1查看 1.5K关注 0票数 0

我正在加载整个HTML页面,并希望获得特定标签之间的所有内容。为此,我要做的是:

代码语言:javascript
复制
articleXpathQueryString = @"//article/div[@class='entry breadtext']";
articleNodes = [articleParser searchWithXPathQuery:articleXpathQueryString];
item.content = [self recursiveHTMLIterator:articleNodes content:@""];

然后我有一个递归函数,它尝试汇总所有子节点的内容以及它们的HTML标记:

代码语言:javascript
复制
-(NSString*) recursiveHTMLIterator:(NSArray*)elementArray content:(NSString*)content {
for(TFHppleElement *element in elementArray) {
    if(![element hasChildren]) {
        //The element has no children
    } else {
        //The element has children
        NSString *tmpStr = [[element firstChild] content];

        if(tmpStr != nil) {
            NSString *css = [element tagName];
            content = [content stringByAppendingString:[self createOpenTag:css]];
            content = [content stringByAppendingString:tmpStr];
            content = [content stringByAppendingString:[self createCloseTag:css]];
        }

        NSString *missingStr = [[element firstTextChild] content];
        if(![missingStr isEqualToString:tmpStr]) {
            if(missingStr != nil) {
                NSString *css= [element tagName];
                content = [content stringByAppendingString:[self createOpenTag:css]];
                content = [content stringByAppendingString:missingStr];
                content = [content stringByAppendingString:[self createCloseTag:css]];
            }
        }

        content = [self recursiveHTMLIterator:element.children content:content];
    }
}
return content;
}

然而,即使结果在某种程度上令人满意,它也没有获得img标签,并且当HTML格式如下时,它会有点混乱:

代码语言:javascript
复制
<p>
<strong>-</strong>
This text is not parsed because it skips it after it acquires <strong>-</strong>, this is why I have the second if-statement which catches up "missing strings", but they are inserted in the wrong order
</p>

所以我的问题是,我应该继续尝试让递归方法正确解析,还是有更容易的方法来获取所需的HTML (然后在web视图中使用)。我要找的是所有的内容

代码语言:javascript
复制
<article> THIS </article>.

换句话说,我想用TFHpple做一些类似的事情(尽管代码不工作):

代码语言:javascript
复制
articleXpathQueryString = @"//article/div[@class='entry breadtext']";
articleNodes = [articleParser searchWithXPathQuery:articleXpathQueryString];
item.content = [articleParser allContentAsString];    //I simply want everything in articleParser in a string format
EN

回答 1

Stack Overflow用户

发布于 2012-12-08 00:19:10

好了,我终于想明白了……我希望这对像我一样愚蠢的人有帮助:

所有需要做的就是将网址加载到the视图中,然后简单地执行一个简单的javascript查询,如下所示(在webViewDidFinishLoad中):

代码语言:javascript
复制
NSString *bread_text = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('entry breadtext')[0].innerHTML"];

来获取一个众所周知的类中的所有内容。现在我需要弄清楚如何在不显示webview的情况下加载它,但这似乎比遍历XML结构容易得多:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13765268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档