ホームページ >ウェブフロントエンド >htmlチュートリアル >Atitit.html パーサーの選択?jsoup?nsoup?,java?c#?.net?version_html/css_WEB-ITnose
Atitit.html パーサーの選択 jsoup nsoup、Java C# .net バージョン
1. フレームワーク選択の要件 1
1.1. その他のドキュメント 1
1.2。
2 . HTMLパーサー機能: 1
2.1. jQuery スタイルの CSS セレクター 1
2. HTML ドキュメントの操作1
3. ブラウザーの HTML 解析の原理 2
4.ヘッド領域 4
5. HTML パーサー 4
6. 参考資料 8
6.1.1. atitit.java?jsoup?html のコラム...8
1. フレームワークの要件選択
1.1. 豊富なドキュメント1.2. クロスプラットフォーム
?
NSo up.Nodes.Document doc = NSoup .NSoupClient.Connect("http://www. oschina.net/").Get();
?
ebClient webClient =?new WebClient();
String HtmlString=Encoding.GetEncoding("utf-8 ").GetString(webClient.DownloadData("http: //www.oschina.net/"));
NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString);
?
WebRequest webRequest= WebRequest.Create("http://www.oschina .net/");
NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(webRequest.GetResponse().GetResponseStream(),"utf-8");
作者:: ラオワの爪 Attilax Ailong, EMAIL:1466519819@qq.com
3. ブラウザが HTML を解析して文字化けを防ぐ原理
詳細
HTML 文書は、文字エンコーディング情報を持つ文字としてインターネット上で送信される一連のバイト ストリームです。文字エンコード情報は、ドキュメントとともに送信される HTTP 応答ヘッダー、またはドキュメントの HTML タグで指定できます。ブラウザは、文字エンコーディング情報に基づいて、バイトストリームをブラウザ上で表示される文字に変換します。ページの文字を構築する方法がわからない場合、ブラウザは当然のことながらページを正しくレンダリングできません。ほとんどのブラウザは、JavaScript コードの実行またはページの描画を開始する前に、一定量のバイト ストリームをバッファリングします。また、バッファリング中に、関連する文字エンコーディング設定を検索する必要があります (注目すべき例外は IE6/7/8 です)。
ブラウザごとにバッファに必要なバイト ストリームの量も異なります。また、エンコード設定が見つからない場合、各ブラウザのデフォルトのエンコードも異なります。ただし、どのブラウザーであっても、十分なバイト ストリームをバッファリングしてページのレンダリングを開始した後、指定されたエンコード設定がデフォルト値と異なることが判明した場合、ドキュメントが再解析され、ページが再描画されます。エンコーディングの変更が外部リソース (cssjsmedia など) に影響を与える場合、ブラウザーはリソースを再リクエストすることもあります。
これらの遅延を回避するには、1k (正確には 1024 バイト。これはテストしたすべてのブラウザの最大バッファリング制限です) を超える HTML ドキュメントに対してできるだけ早く文字エンコーディングを指定します。
推奨事項
HTTP ヘッダー情報またはメタ タグを通じてエンコードを指定します
HTML ドキュメントのエンコード設定を指定するには、いくつかの方法があります:
サーバー側: すべての text/html タイプに対して、Web サーバーの構成を通じてエンコード パラメーターを指定します。ドキュメントでは、正しいエンコード情報を含む Content-Type ヘッダーが指定されています。例: Content-Type: text/html;charset=UTF-8
クライアント: HTML コードにメタ タグ http-equiv="content-type" を含めて、文字エンコーディングを指定します。例えば 。
可能であれば、WebサーバーのHTTPヘッダー情報で文字エンコードを指定するように設定してください。一部のブラウザ (Firefox など) は、(他のブラウザよりも) 短い遅延バッファを使用して、JavaScript を実行する前にヘッダーで文字エンコーディングが指定されているかどうかを確認します。これは、HTML タグのチェックをスキップし、バッファリングのバイト数と遅延を短縮できることを意味します
4. ヘッド領域の先頭にメタ タグを配置します
Web サーバーの設定を変更できない場合は、メタ タグを介してエンコーディングを指定する必要があります、エンコーディングの指定に使用するメタ タグがドキュメント内の head タグの最初の子要素であることを確認してください。ブラウザはドキュメントの最初の 1024 バイトで文字エンコード パラメータを検索するため、パフォーマンスの低下を避けるために、エンコード パラメータがドキュメント ヘッダーに早く現れるほど良いです (注釈: IE6 より前のバージョンでは、特定の状況下では、メタタグが head の最初の子要素でない場合、無視されます
5. HTML パーサーHTML パーサーの仕事は、HTML タグを解析して解析ツリーにすることです。
HTML の語彙と構文は、w3c 組織によって作成された仕様で定義されています。現在のバージョンは HTML4 ですが、HTML5 の作業が進行中です。
パーサーの紹介で見られるように、文法は BNF に似た形式で規範的に定義できます。残念ながら、通常のパーサーに関する議論はすべて HTML には当てはまりません (冗談で言及しているわけではありません。これらのパーサーは CSS と JavaScript の解析に使用できます)。 HTML は、パーサーに必要なコンテキストフリー構文で定義できません。従来、HTML 形式の仕様は DTD (Document Type Definition) によって定義されていましたが、それは文脈自由文法ではありませんでした。
HTML は XML に非常に近いです。 XML に使用できるパーサーは多数あります。 HTML には XHTML と呼ばれる XML バリアントもありますが、それらの主な違いは何でしょうか?違いは、HTML アプリケーションはより「寛容」で、一部の開始タグや終了タグなどを見逃してもよいことです。これは全体として「ソフト」な構文であり、XML ほど厳密で厳格ではありません。全体として、この一見微妙な違いが 2 つの異なる世界を生み出します。一方で、HTML が人気を博しているのは、間違いが許容され、Web ページ作成者としての作業が容易になるためです。その一方で、文法的な形式を書くのが難しくなります。要約すると、HTML 解析は単純ではありません。既製のコンテキスト依存パーサーはそれを処理できず、XML パーサーも同様です。
前に見たように、HTML はトップダウンまたはボトムアップのパーサーを使用して解析することはできません。
その理由は次のとおりです:
1. 言語の耐性特性
2. ブラウザーは無効な HTML に対するフォールト トレランスを提供する必要があるという事実。
3. 分析プロセスを繰り返します。通常、ソース コードは解析プロセス中に変更されません。しかし、HTML では、script タグに「document.write」が含まれている場合にコンテンツを追加できます。つまり、解析プロセスによって実際にソース コードが変更されます。
ブラウザは、HTML ドキュメントを解析するための独自のパーサーを作成します。
HTML5 仕様には、解析アルゴリズムに関する具体的な指示があり、単語の分割とツリーの構築という 2 つの部分で構成されます。
単語のセグメンテーションは字句解析部分に属し、入力を一連の記号に解析します。 HTML における記号は、開始タグ、終了タグ、属性名、属性値です。
トークナイザーはこれらのシンボルを認識し、ツリー ビルダーに入力し、入力が終了するまで次のシンボルの分析と処理を続けます
5.0.1.4. 単語分割アルゴリズム以下のタグを分析します:
Hello world
「<」が発生したときの初期状態は「データ状態」です。ステータスが「タグオープン状態」に変わります。 「a-z」の文字で構成されたシンボルを食べると「開始タグトークン」が生成され、「タグ名状態」に状態が変化します。 「>」に遭遇するまでこの状態が続きます。各文字が新しいシンボル名に追加されます。この例では、解決されたシンボルは「html」です。
「>」に遭遇すると、現在のシンボルが完了し、状態が「データ状態」に戻ります。 「
」タグも同様に扱われます。 「html」タグと「body」タグが完成したので、「データ状態」の状態に戻ります。 「H」(「Hello world」の頭文字)を食べると文字記号が生成され、「」の記号に遭遇するまで、「Hello world」という文字記号が完成しました。 「。」これで「タグオープン状態」の状態に戻りました。次の入力「/」を食べると「終了タグトークン」が生成され、「タグ名状態」状態に遷移します。繰り返しますが、この状態は「>」を押すまで残ります。この時点で、新しいラベル シンボルが完成し、「データ状態」に戻ります。同様に「