2

これが私のHppleの最後の質問だと思います!Hpple で解析している HTML ドキュメントのエントリを見つけました。さまざまなクエリを試しましたが、うまくいきません。以下はHTMLのサンプルです。HTML

//div[@class = 'entry-content']/p で、「今日のプロジェクト」で始まるテキストを取得できます。//div[@class = 'entry-content']//a[@title]//* を使用して次のタグを取得し、その後のすべてのテキストを取得することもできます。ただし、ご覧のとおり、「/span」の後にまだテキストがあります。ただし、私が試したものは何も機能しません。//div[@class = 'entry-content']/p//text(), //div[@class = 'entry-content']/p// を試して、要素の子を調べてみました以下::*、何も機能しません。誰かが何かアイデアを持っているなら、私はすべての耳です!!! いつもありがとうございます。

EDIT #1 さまざまなことを試してみると、HTML を見ていました。p タグの下には、必要なテキスト "Today's project..." があり、テキストの色を変更し、リンクを含むスパンがあり、その後にさらにテキストが続きます。私がしなければならないことは、テキストを読み続けるためにそのスパンを飛び越えることです。多分私の質問は、どうやってスパンを飛び越えるのですか? ご覧いただきありがとうございます。

編集 #2 さて、私はこれに報奨金を開始するつもりです。私は本当に助けが必要です。私はあらゆる場所を見て、さまざまなことを試してきました。しかし、何もうまくいきません。その1つの閉じたスパンの後のテキストを取得できません。そして、この形式はよく登場します。アプリ用にこれを解析しているブログの著者は、時々彼女の言葉のスタイルを変更し、彼女がスタイルを変更した後、テキストを取得できません。どんな助けでも大歓迎です。ご覧いただきありがとうございます。

編集 #3 これは、DOM ツリー HTML の別のスクリーン ショットです。div クラスの「エントリ コンテンツ」を解析していることに気付くと、問題のテキストが表示されます。「今日...」で始まり、テキストの色を変更するスパン、そのテキストを取得できます。必要なのは、終了 p タグの直前の「It was one.....」というテキストです。

ドムの木

また、HTML 全体を gist に配置しました。ここに。問題の行は 102 です。ただし、HTML はうまくコピーされませんでした。ありがとう。

4

2 に答える 2

3

階層をさらに進めるためにコードにいくつかの変更を加えると、HTML サンプルで機能しました。注: 簡単にするために、すべてのエントリ コンテンツを 1 つの 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);
于 2013-05-27T19:51:24.067 に答える
0

私を「生の」男と呼んでください。ただし、コードをまっすぐな文字列として読み取ってから、目的のタグで配列にバストすることができます。これは、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>"
于 2013-05-23T15:04:16.313 に答える