0

HTML ページ全体を読み込んでおり、特定のタグ間のすべてのコンテンツを取得したいと考えています。このために私はやっています:

articleXpathQueryString = @"//article/div[@class='entry breadtext']";
articleNodes = [articleParser searchWithXPathQuery:articleXpathQueryString];
item.content = [self recursiveHTMLIterator:articleNodes content:@""];

そして、すべての子ノードとその HTML タグのコンテンツを合計しようとする再帰関数があります。

-(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;
}

ただし、何とか満足のいく結果が得られたとしても、HTML が次の形式の場合、img タグが取得されず、少しおかしくなります。

<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 ビュー内で使用する) を取得する簡単な方法があるかどうかです。私が探しているのは、すべてのコンテンツです

<article> THIS </article>.

つまり、TFHpple で次のようなことをしたいと思います (ただし、コードは機能しません)。

articleXpathQueryString = @"//article/div[@class='entry breadtext']";
articleNodes = [articleParser searchWithXPathQuery:articleXpathQueryString];
item.content = [articleParser allContentAsString];    //I simply want everything in articleParser in a string format
4

1 に答える 1

0

わかりました私はついにこれを理解しました...誰かが私のように愚かである場合、これが役立つことを願っています:

行う必要があるのは、URL を Web ビューにロードし、次のように (webViewDidFinishLoad で) 簡単な JavaScript クエリを実行することだけです。

NSString *bread_text = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('entry breadtext')[0].innerHTML"];

よく知られているクラス内のすべてのコンテンツを取得します。ここで、最初に webview を表示せずにロードする方法を理解する必要がありますが、これは XML 構造を反復するよりもはるかに簡単に思えます :)

于 2012-12-07T16:19:10.103 に答える