|
.NET TIPS HTMLファイルを簡単に解析するには?デジタルアドバンテージ 岸本 真二郎2008/06/26 |
![]() |
|
|
|
HTMLファイルの文法チェックや、特定のHTMLタグの内容を取り出したりする場合、独自のパーサーを作成したり、正規表現を使ってHTMLファイルを処理することがあるが、既存のHTMLパーサーを利用することで、作業を大幅に軽減できる。
オープンソースのライブラリであるNTidyは、HTML Tidyの.NET版である。これは本来、HTMLファイルの文法チェックと整形を行う(文法エラーを自動修正する)ためのライブラリなのだが、そのAPIを利用することで、文法チェック以外にもHTMLファイルの解析に利用できる。
また、本来の目的が文法に沿った自動的なHTMLタグの修正ということもあり、多少のHTMLタグの記述の誤りがあっても、文法エラーとならずに最後まで解析を行うことができるというのもNTidyの大きな特長の1つだ。
NTidyを使ったタグの抽出
NTidyはSourceForgeのNTidyのページからダウンロードできる(NTidy_bin_v1.0.zip)。このzipファイルには「NTidy.dll」というファイルが1つ含まれているだけという、至ってシンプルな構成だ。このNTidy.dllを適当なフォルダに配置して、利用するプロジェクトから参照の追加を行うことで、利用の準備は整う。
■<img>タグの一覧の例
NTidyの利用例として、ここではHTMLファイルに含まれる<img>タグを一覧表示してみる。そのプログラムは次のようになる。
| ||
| NTidyによるimgタグの一覧表示(上:C#、下:VB) |
NTidyでは、まずTidyDocumentクラス(NTidy名前空間)のインスタンスを作成し、エンコードの指定をしてから対象となるHTMLファイルをロードする。その後CleanAndRepairメソッドを実行すると、HTMLファイルの解析(文法チェック)が行われる。
解析結果は、<head>タグの内容がTidyDocumentオブジェクトのHeadプロパティに、<body>タグの内容がBodyプロパティに、TidyNodeクラス(NTidy名前空間)によって階層的に保持される。TidyNodeクラスには下層につながる要素を示すChildNodesプロパティ(TidyNodeクラス用のコレクションであるTidyChildNodeCollectionクラス)があり、このChildeNodesプロパティをたどっていくことで、HTMLファイル内のすべての要素を走査できる。
コードでは、HTMLファイルを読み込んだ後、<body>要素を示すTidyNodeオブジェクトをshowImgTagメソッドに渡している。showImgTagメソッドでは、要素が<img>タグならその内容を表示している。そして、さらにすべての子要素に対してshowImgTagメソッドを再帰的に呼び出して、すべての<img>タグをチェックしている。
要素(TidyNodeオブジェクト)がどのタグかは、TidyNodeクラスのIsXXXプロパティ(XXX部分はタグ名)で判断できる。上記のように、<img>タグの場合は、IsImgプロパティがtrueになる。もし<table>タグなら、IsTableプロパティがtrueになるといった具合だ。また、IsTextプロパティを判断することで、タグを除いたテキスト部分のみを取り出すことも可能である。
NTidyについての詳細は、本家のTidyのドキュメントを見るのが早い。![]()
| カテゴリ:クラス・ライブラリ 処理対象:HTMLドキュメント 使用ライブラリ:TidyDocumentクラス(NTidy名前空間) 使用ライブラリ:TidyNodeクラス(NTidy名前空間) 使用ライブラリ:TidyChildNodeCollectionクラス(NTidy名前空間) |
| 「.NET TIPS」 |
TechTargetジャパン
- 新人プログラマーのためのInsider.NETの歩き方 2012 (2012/5/22)
晴れて.NETプログラマーとなる新人が効率的に開発技術を習得するには? 大量にある記事群の中から新人が読むべきお勧めを厳選して紹介 - jQuery MobileでJavaScriptプログラミング (2012/5/17)
jQuery Mobileは手軽なだけでなく、JavaScriptのAPIも充実しており、独自機能の実装もできる。今回は「グローバル設定」と「イベント」を解説 - Windows上で開発するための開発環境構築入門 (2012/5/16)
Windowsを使ってチームで開発している? なのにサーバOSを設定・運用した経験がない? そうなら、今すぐ学ぼう - 「コントラクト」でアプリのサンドボックスを乗り越える! (2012/5/11)
Metroスタイル・アプリはサンドボックスの中で動作する。それを乗り越えてほかのアプリと連携する仕組み「コントラクト」を解説
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


