SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

HTMLをXMLへ変換する自作クラス

WebサイトやローカルのHTMLソースをXML形式へ変換して利用する

  • X ポスト
  • このエントリーをはてなブックマークに追加

インターネットではHTMLによって多くの情報が提供されていますが、それらをプログラムから扱うには文字列を解析する必要があり、少々不便です。そこで本稿ではHtmlConverterという自作のクラスを使って、HTMLをさまざまな情報のプロトコルとして採用されているXMLに変換する方法を紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 インターネット上で公開されている情報のほとんどはHTMLによって記述され、その情報量は膨大であり、人類が共有する資産として目を見張る物があります。

 しかし、プログラム上からそれらの情報を利用する場合、一般的に、HTML内のタグや文字列を基に情報を解析する必要があるため、簡単に扱うことができません。

 そこで、HTMLを現在さまざまな情報のプロトコルとして採用されているXMLへ変換することによって、情報の利用を簡便化できるHtmlConverterというクラスを紹介したいと思います。

対象読者

 C#を扱える方。

必要な環境

 VisualStudio .NET 2003以上、または .NET Framework 1.1以上がインストールされていること。

概要

HtmlConverterの概要図
HtmlConverterの概要図

 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タグ外に記述された要素は無視されます。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
HtmlConverterのコード上からの使用方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

角尾 良太(カクオ リョウタ)

.NETの楽しさと力強さ、そしてJavaの美しさなど色々な観点からプログラミングの楽しさをたくさんの人と共有できたら良いなと願う.NETプログラマ。以下のサイトで制約モデルのテストやバリデーションに関するフレームワークライブラリを公開しています。 NKiwi Framework ライブラリ

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/448 2006/07/17 00:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング