はじめに
インターネット上で公開されている情報のほとんどはHTMLによって記述され、その情報量は膨大であり、人類が共有する資産として目を見張る物があります。
しかし、プログラム上からそれらの情報を利用する場合、一般的に、HTML内のタグや文字列を基に情報を解析する必要があるため、簡単に扱うことができません。
そこで、HTMLを現在さまざまな情報のプロトコルとして採用されているXMLへ変換することによって、情報の利用を簡便化できるHtmlConverter
というクラスを紹介したいと思います。
対象読者
C#を扱える方。
必要な環境
VisualStudio .NET 2003以上、または .NET Framework 1.1以上がインストールされていること。
概要
HtmlConverter
クラスは、「ネットワーク上のURL」または「HTMLが記述されているファイル」、「HTMLで記述された文字列」からSystem.Xml.XmlDocument
を生成することができます。
また実行ファイルとして配布している 「HtmlConverterコンソールアプリケーション」は、内部でHtmlConverter
クラスを使用することで、さまざまなHTMLリソースをXMLファイルへ変換してローカルへ保存することができます。
「HtmlConverterコンソールアプリケーション」は、HTMLソースが記述されているファイルのドラッグ&ドロップによる変換に対応しているほか、オプションにURLまたはファイルパスを指定して使用することができます。
XMLで許可されていないHTMLの文法の処理
HTMLをXMLへ変換するに当たって、HTMLでは許可されているが、XMLでは許可されていないいくつかの文法があります。XmlConverter
クラスはHTMLをXMLの文法に適合させるために、元のデータ構造を可能な限り保持した形でいくつかの修正を行います。以下にタグ、属性、コメント要素などで修正が必要な文法を示します。
タグの修正
<!-- 終了タグを省略している --> <p> テキスト<br> </p> <!-- 入れ子が正しくない --> <p> <b>テキスト </p> </b> <!-- 対応する開始タグが存在しない --> <p> </font>テキスト </p> <!-- 開始と終了のタグ名の大文字・小文字が一致していない --> <font>テキスト</FONT>
<!-- 閉じていないタグは閉じられます --> <p> テキスト<br /> </p> <!-- 正しい入れ子構造に修正されます --> <p> <b>テキスト</b> </p> <!-- 対応する開始タグが存在しない終了タグは削除されます --> <p> テキスト </p> <!-- 開始と終了のタグ名の大文字・小文字が一致していない 場合は開始タグの表記に統一します --> <font>テキスト</font>
属性の修正
<!-- 値を引用符で囲んでいない --> <table color=#000000 > <!-- 値が設定されていない --> <table nowrap> <!-- 同名の属性が複数存在する --> <font color="RED" color="YELLOW">テキスト</font>
<!-- 引用符がない場合は追加されます --> <table color="#000000"> <!-- 値が設定されていない場合は既定値として属性名が設定されます --> <table nowrap="nowrap"> <!-- 同名の属性が複数存在する場合ははじめの属性のみが適用されます --> <font color="RED">テキスト</font>
コメントの修正
<!-- 末尾にハイフンが存在する --> <!-- コメント ---> <!-- 文字列内に2つ以上の連続するハイフンが存在する --> <!-- テキスト-- -->
<!-- 末尾のハイフンは空白に置換されます --> <!-- コメント --> <!-- 連続するハイフンは空白に置換されます --> <!-- テキスト -->
これら以外にも、XMLではルート要素を1つしか持つことができないという制限があるため、HTMLタグ外に記述された要素は無視されます。