ホームページ > ウェブフロントエンド > htmlチュートリアル > HTMLParserの使い方を詳しく解説(2)

HTMLParserの使い方を詳しく解説(2)

黄舟
リリース: 2016-12-29 15:52:18
オリジナル
1132 人が閲覧しました

HTMLParser は、解析された情報をツリー構造として保存します。ノードは、情報を保存するためのデータ型の基礎です。
Node の定義を見てください:

public interface Node extends Cloneable;
ログイン後にコピー

Node にはいくつかの種類のメソッドが含まれています:
ツリー構造を横断する関数については、これらの関数が最も理解しやすいです:

Node getParent ():取得父节点
NodeList getChildren ():取得子节点的列表
Node getFirstChild ():取得第一个子节点
Node getLastChild ():取得最后一个子节点
Node getPreviousSibling ():取得前一个兄弟(不好意思,英文是兄弟姐妹,直译太麻烦而且不符合习惯,对不起女同胞了)
Node getNextSibling ():取得下一个兄弟节点
ログイン後にコピー

Node のコンテンツを取得する関数:filterフィルタリングに使用される

String getText ():取得文本
String toPlainTextString():取得纯文本信息。
String toHtml () :取得HTML信息(原始HTML)
String toHtml (boolean verbatim):取得HTML信息(原始HTML)
String toString ():取得字符串信息(原始HTML)
Page getPage ():取得这个Node对应的Page对象
int getStartPosition ():取得这个Node在HTML页面中的起始位置
int getEndPosition ():取得这个Node在HTML页面中的结束位置
ログイン後にコピー

関数:訪問者のトラバーサルに使用される
void collectInto (NodeList list, NodeFilter filter):基于filter的条件对于这个节点进行过滤,符合条件的节点放到list中。
ログイン後にコピー

機能:

rreee


機能コンテンツの変更に使用されますが、このタイプはあまり使用されていません。実際には、HTML ページを処理するために HTMLParser を最もよく使用します。Filter または Visitor 関連の関数が必要であり、1 番目と 2 番目のタイプの関数が最もよく使用されます。最初のタイプの関数を理解するのが簡単です。例を使用して 2 番目のタイプの関数を説明します。
以下はテストに使用したHTMLファイルです:

void accept (NodeVisitor visitor):对这个Node应用visitor
ログイン後にコピー

テストコード:

void setPage (Page page):设置这个Node对应的Page对象
void setText (String text):设置文本
void setChildren (NodeList children):设置子节点列表
ログイン後にコピー

出力結果:

void doSemanticAction ():执行这个Node对应的操作(只有少数Tag有对应的操作)
Object clone ():接口Clone的抽象函数。
ログイン後にコピー

===================== = ===========================

最初のノードのコンテンツの場合、対応する行は の方がわかりやすいですね。

この出力結果からは、コンテンツのツリー構造も確認できます。というか森の構造。 DOCTYPE、head、html など、ページ コンテンツの第 1 レベルのタグは、トップレベルの Node ノードを形成します (多くの人は、2 番目と 4 番目のノードのコンテンツについて少し不思議に思うかもしれません。実際、これら 2 つのノードは2 つの改行記号。HTMLParser は HTML ページのコンテンツ内のすべての改行、スペース、タブなどを対応するタグに変換します。このような Node があります。内容は少ないですが、レベルは高いです (笑)

getPlainTextString を使用すると可能になります。ユーザーに表示されるものはすべて含まれます。興味深い点が 2 つあります。まず、 タグ内の Title コンテンツはプレーンテキストであるため、タイトル内に表示されていても表示される可能性があります。さらに、前述したように、HTML コンテンツ内の改行やその他の文字もプレーンテキストになっています。これは少し論理的な問題のようです。

さらに、toHtml、toHtml(true)、toHtml(false)の結果に違いがないことがわかるかもしれません。これは実際に当てはまります。HTMLParser のコードをたどると、AbstractNode、RemarkNode、 TagNode と TextNode、toHtml(boolean verbatim) の実装では、verbatim パラメーターは処理されないため、3 つの関数の結果はまったく同じになります。独自の特別な処理を実装する必要がない場合は、単純に toHtml を使用します。


上記は HTMLParser の使用方法の詳細な説明 (2) です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。





関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート