2

Restful Web サービスからデータを取得する iOS アプリがあります。受信しているコンテンツの一部が に読み込まれていUITextViewます。テキスト ビューに表示される部分は、HTML 形式で表示されます。段落タグを使用してテキストビューを適切にフォーマットしながら、HTML からプレーンテキストに変換する必要があります。

HTML形式は次のようになります

<p data-seq="1"><span class="paragraph">Content of paragraph 1</span></p><p data-seq="2"><span class="paragraph">Content of paragraph 2</span></p>

<p data-seq="2"><span class="paragraph">....</span></p>が段落の開始と終了を示していることがわかります。

私は最初にNSScannerこの例から使用しようとしました。NSString HTML マークアップをプレーンテキスト NSString に変換する方法は? . これはすぐに実装できましたが、すべてのタグを取り除き、テキストを 1 つの長い段落として解析します。

libXml2コードに追加しました。実装のためにこのチュートリアルに従い始めましたが、作業を開始した後、出力を段落にフォーマットする方法がわかりませんでした。

DTCoreText ライブラリの推奨事項も確認しましたが、多くの情報はありませんでした。

段落を維持しながらhtmlをプレーンテキストに解析する方法について、上記の3つのオプションのいずれか、または独自のオプションのいずれかを使用して、誰かがスニペットをスローする可能性がありますか?

解決

LXTの推奨に従って、調査しDTCoreTextました。なんとかアプリにインストールできたら(そのためには間違いなくココアポッドをお勧めします)。#import "DTCoreText.h"私のように簡単でdetailViewController、次に以下の行でUITextView.

    NSDictionary *options = @{DTUseiOS6Attributes: [NSNumber numberWithBool:YES]};
    NSData *htmlData = [self.htmlString dataUsingEncoding:NSUTF8StringEncoding];
    NSAttributedString *stringArticle = [[NSAttributedString alloc] initWithHTMLData:htmlData options:options documentAttributes:NULL];
    self.newsDetailText.attributedText = stringArticle;

行を含めなかったため、最初のビルドは失敗しましたDTUseiOS6Attributes。2 番目のビルドは成功し、詳細ビューは完全にフォーマットされました。ガッツポーズの瞬間でした!おすすめのLXTをありがとうございます!

4

1 に答える 1

1

正直なところDTCoreText、独自のパーサーを作成するよりも使用することをお勧めします。車輪を再発明しても実際のメリットはありません。また、大規模なユーザー ベースで広く使用されているライブラリでもあります。

ライブラリには非常に優れたドキュメントがあり、著者は Twitter ( @cocoanetics ) でもかなり活発に活動しています。

の代わりに提供されている気の利いたDTAttributedTextViewクラスを使用できますUITextViewNSAttributedStringライブラリは、メソッドで拡張されるカテゴリも提供しますinitWithHTMLData:documentAttributes:。これにより、属性付き文字列を作成してビューにプラグインできます。実際には、数行のコードにすぎません。

于 2013-07-05T23:22:39.010 に答える