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