3

<ul>リスト ( 、<ol>) を TextViewに追加しようとしています。通常、HTMLをTextViewにロードします

textview.setText(Html.fromHtml("some String with HTML in it"));

ただし、すべての HTML タグで機能するわけではありません。デフォルトの TagHandlerをオーバーライドして呼び出すことで、さまざまなタグのサポートを拡張できます。

textview.setText(Html.fromHtml("some String with HTML in it", null, new MyTagHandler()));

問題は、xmlReader には何がandroid.text.Html.TagHandler.handleTag(boolean opening, String tag, Editable output, XMLReader xmlReader)含まれているかということです。<li>どういうわけか使用して、すべてのデータ<ul>(または一般的にその内容を持つ任意の要素)を取得することは可能ですか?

if (tag.equals("ul")) {
  // some call to xmlReader
}

そして、はい、私はそれらの次のスレッドをすでに見ました。別の解決策を探しているだけです。

4

1 に答える 1

0

XMLReader は実際には単なるインターフェースであり、それが定義するメソッドはAPI ドキュメントから読み取ることができます。

Htmlクラスで SAX イベントを処理するために使用されるContentHandlerは、 Html.HtmlToSpannedConverterとして知られています。これは、プライベートのhandleStartTag(String,Attributes)メソッドを使用して、HTML 要素の開始タグを処理します。したがって、標準でサポートされている要素のリストは、br、p、div、em、b、strong、cite、dfn、i、big、small、font、blockquote、tt、a、u、sup、のようです。サブ、h1...h6、および img。最後に、タグが認識されない場合、HtmlToSpannedConverterへのパラメーターとして指定された TagHandler が使用されます (null でない場合)。

SAX ハンドラーの考え方は、そこからのみイベントを取得するというものです。ここに開始タグ、ここに CDATA ブロック、ここに終了タグなどがあります。XML ドキュメントを処理するもう 1 つの方法は、DocumentBuilder を使用してDocument作成することです。それのオブジェクト。SAX パーサーは、メモリにうまく収まらない大きな入力ストリームがある場合、ドキュメントをすばやく解析する必要がある場合、またはどこかからデータを受信して​​いて、受信する前にその場で解析したい場合に使用されます。それのすべて。したがって、SAX ハンドラーを使用する場合、XML ストリーム内を前後にジャンプすることはできません。したがって、「のすべてのデータを取得することは可能ですか」という質問への回答を要約すると、いいえ、残念ながらそうではありません。<li><ul>

TagHandler では、開始の "ul" タグに遭遇したときに改行を発行し、開始の "li" タグを入力したときに "•" を発行し、終了の "li" または "ul " 鬼ごっこ。

ネストされたリストをサポートする必要がある場合は、TagHandler にカウンターを追加して、開始の「ul」に遭遇するたびに増加し、終了の「ul」に遭遇すると減少するようにすることができます。次に、ネストされたリストのカウンターに基づいて、箇条書きにさまざまな量のインデントを追加できます。

もう 1 つの方法は、開始タグに遭遇したときに要素を追加し、終了タグに遭遇したときにそれを削除することによって、要素のスタックを作成することです。スタックを調べることで、いつでも祖先の「ul」要素の数を簡単に数えることができます。

于 2012-10-20T11:14:06.347 に答える