HtmlConverterのコード上からの使用方法
HtmlConverterクラスを使用するには、コード上でHtmlConverterクラスを呼び出す方法と、サンプルファイル(実行ファイル)のコンソールアプリケーションからオプションを指定して呼び出す方法があります。
コード上から使用する場合は、System.Xml.XmlDocument型へ変換できる型に次のようなものがあります。
- HTMLソースが記述されている文字列
System.String - Webサイト上のHTMLファイルのURLを示す
System.Uri - HTMLソースが保存されているファイルを表す
System.IO.FileInfo
クライアントは、これらのインスタンスをHtmlConverterのコンストラクタに指定して初期化した後に、ToXmlDocumentメソッドを呼び出すことで、指定されたリソースから変換し生成されたSystem.Xml.XmlDocumentを取得することができます。
HtmlConverterクラスのメンバは以下のクラス図を見ても分かるとおり、とてもシンプルです。

実際にコード上からHtmlConverterクラスを利用する例を示します。
// コンストラクタ ( System.Uri 型を使用 ) HtmlConverter converter = new HtmlConverter( new Uri( "http://codezine.jp/" ) ); // 生成された XmlDocument を取得 HtmlConverter convertedXmlDocument = converter.ToXmlDocument();
生成されたSystem.Xml.XmlDocumentは次のようになります(変換されたXMLファイルはHtmlConverterコンソールアプリケーションを使用して作成しました)。
サンプルとしていくつかのWebサイトのHTMLソースをXMLへ変換しました。これらの変換前と変換後のコードを比べると、どのように変換されるか分かると思います。
| 変換前 | 変換後 |
| Microsoft | Microsoft 変換後 |
| Google 検索結果 | Google 検索結果 変換後 |
| Wikipedia | Wikipedia 変換後 |
HtmlConverterコンソールアプリケーションの使用方法
コード上からの使用に比べると多少速度が遅くなりますが、ファイルに保存されているHTMLソースをドラッグ&ドロップでXMLファイルへ変換できたり、バッチファイルを利用して複数のWebサイトからHTMLソースを取得して複数のXMLファイルを作成したりと便利に利用することができます。
以下に、HtmlConverterコンソールアプリケーションの構文と指定するオプションを示します。
HtmlConverter [変換元リソースパス] [出力先ファイルパス][/encoding:エンコーディング名] [/appendBaseTag] [/noDialog]
HtmlConverter http://codezine.jp/ HtmlConverter example.htm HtmlConverter http://www.microsoft.com/ convertedHtml.xml /encoding:utf-8 HtmlConverter http://www.google.co.jp/ /encoding:shift_jis /appendBaseTag
| オプション名 | 説明 | 例 |
| 変換元リソースパス | XMLへ変換するHTMLリソースのパスを記述します。パスにはURLまたはファイルパスを使用できます。 | convertHtml.htm または http://codezine.jp/ など |
| 出力先ファイルパス (*省略可) | XMLへ変換したファイルの出力先のファイルパスを記述します。省略した場合は、実行したカレントディレクトリに 「converted.xml」 というファイル名で出力されます。 | convertedHtml.xml または convertedHtml.txtなど |
| /encoding:[エンコーディング名] (*省略可) | 指定されたリソースからのデータの読み取り、および出力時の書き込みの際に使用するエンコーディング名を指定します。省略された場合は、システムのデフォルトのエンコーディングが使用されます(システムが日本語の場合は、Shift-Jisになります)。このエンコーディング名は内部でSystem.Text.Encoding.GetEncoding( String ) メソッドによってSystem.Text.Encoding型のインスタンスを生成する際に使用されます。具体的に使用できる文字列はMSDNのEncoding.GetEncodingsメソッド(System.Text)を参考にしてください。 | /encoding:shift_jis または /encoding:utf-8 または /encoding:euc-jpなど |
| /appendBaseTag (*省略可) | このオプションを記述すると、変換されたXMLファイル内のheadタグ内に、リソース元のURLまたはファイルパスを元に作成されたbaseタグが追加されます。baseタグは変換後のXMLファイルの拡張子をhtmlに変更してブラウザなどで表示させる際などに相対パスで記述された画像やリンクの参照を有効にするために利用されます。省略した場合は追加されません。 | /appendBaseTag |
| /noDialog (*省略可) | このオプションを記述すると変換完了時などに表示される通知ダイアログが非表示になります。多数のリソースを変換する際などに指定するとすべてのリソースを自動的に処理されるので便利です。 | /noDialog |
簡単にコンソールの動作を試すことができるように、いくつかのWebサイトを変換するデモンストレーションとして「Demonstration.bat」というバッチファイルをアーカイバ内に同封してありますので、よろしければ実行してみてください。
HtmlConverter内部構造
HtmlConverterクラスの中核となる解析、変換といった処理のほとんどは外部のクラスが行っています。
まずHtmlConverterはHtmlParserクラスのGetHtmlTreeElementメソッドを呼び出し、前稿で紹介したTreeElementクラスを利用して、HTML要素を表現するHtmlElementクラスからなるHTMLのツリー構造を構築します。ツリーの構築は、同じく前稿で紹介したTreeElementVisitorクラスでツリー内を移動しながら行っています。
HTMLソース文字列内の解析には、文字列を前後へ移動しながら取得することができるCharacterVisitorという自作のクラスを利用しています。HTML要素の開始位置となる文字列 "<"、"<!"、">" などを移動しながら、タグや属性、テキスト、コメントなどの要素の解析に対応するIHtmlElementParserを実装したインスタンスをHtmlElementParserFactoryによって生成し、そのパーサーからHtmlElementを生成して取得します。

HTMLツリー構造を表現するTreeElementクラス
HTMLはタグ、属性、テキスト、コメントによるツリー構造で構成されています。このツリー構造は次のようにTreeElementクラスを利用して表現しています。

まとめ
HtmlConverterクラスを使用することで、さまざまな形式のHTMLリソースからSystem.Xml.XmlDocumentを生成することができます。また、HtmlConverterコンソールアプリケーションを利用することで、ファイルに保存されたHTMLソースやWebサイトのHTMLソースを簡単にXML形式に変換し保存することができます。
これらが、皆さんがネットワーク上のリソースなどからさまざまな情報を利用する際の足掛かりになれば幸いです。

[/encoding:エンコーディング名] [/appendBaseTag] [/noDialog]