iOS - html文字列のすべての<img>を検索する最速の方法ですか?

私は処理するために、多くのHTML文字列(Googleリーダーからのニュース項目)を持っています。主に私がする必要があるのは、HTMLからすべてのimgタグを取得することです。

誰かが私にそれを行う最も効率的な方法を教えてもらえますか?

ありがとう

また、すべてのタグを取得する必要がある場合

タグ? 1回の実行で2つ以上のタグを取得する最も速い方法はありますか?

ありがとう

1

3 答え

HTML文字列が実際に有効なXML(実際にはXHTML)であると仮定すると、XPathを使用して名前 "IMG"のすべての要素を一致させることを検討する必要があります。この種のことをうまくやっていくために、iOSアプリケーションでさまざまなCライブラリを使用しました。

2
追加された
@コブル、ありがとう。実際、RSSアイテムの多くのHTMLは厳密な有効なHTMLではないと私は推測できません。また、私はXHTMLのドキュメントを構築する場合、それは純粋な文字列スキャンよりもはるかに遅いです。
追加された 著者 Jackson Tale,
それはランダムなRSSアイテムを作るのにかなり大きな前提です。
追加された 著者 cobbal,
明確にするために、これはまだ最高の方法かもしれません。これは、XMLパーサと、適切に整形されたHTMLまたは不正な形式のHTMLをどれくらいよく解析するかによって異なります。
追加された 著者 cobbal,
True - それはXHTMLページでのみ動作するアイデアなので、制限されています。
追加された 著者 Tim Dean,

試してみるもう1つのアプローチは、NSScannerインスタンスを使用することです。 htmlStringと呼ばれるNSStringにHTML文字列があると仮定すると、次のようなものを試すことができます:

NSScanner *scanner = [NSScanner scannerWithString:htmlString];
while ([scanner scanUpToString:@"" intoString &tagContents]) {
       //Do something with tag contents
    }
    else {
       //Do nothing? I think this would be hit on the last time through the loop
    }
}
2
追加された

libtidy + NSXMLParserを試してください:

 doc = [[NSXMLDocument alloc] 
           initWithContentsOfURL:url
                         options:(NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA)
                           error:&err];
 if (!doc) {
     doc = [[NSXMLDocument alloc] 
           initWithContentsOfURL:url
                         options:NSXMLDocumentTidyHTML
                           error:&err];
 }

From the doc, NSXMLDocumentTidyHTML: Formats HTML into valid XHTML during processing of the document.

これでうまくいかない場合は、HTMLソースをUIWebViewにロードし、javascriptを使用してDOMにアクセスすることができます。

1
追加された
こんにちは、実際にこれは私がやっていることです、最初に整頓してから解析してください。それは非常に遅いです。 1つのrss項目(HTMLの長さはおよそ2KB〜10KB)で約0.5〜0.9秒かかります。私が50の項目のためにこれをすると、約1分です。
追加された 著者 Jackson Tale,
あなたはHTML文字列について尋ねました。 RSSはHTML文字列ではありません。あなたはobjective-c RSSパーサーをチェックしましたか?より具体的に、より速く、私は推測する。
追加された 著者 djromero,
NSXMLDocumentはiOSで利用できないありません
追加された 著者 malaba,