気楽なソフト工房

プログラミングについていろいろな記事を書いています。



mykonos2008

Author:mykonos2008
システムエンジニアとして働いている30代の会社員です。
仕事や趣味でプログラムを書いている方の役に立つ記事を書いていきたいと思っています。
ご意見、ご感想はこちらまで
If you are an english speaker,Please visit my english blog.

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
先日、ベータ版をリリースしましたSEO分析ツール「Crete」では、キーワードが含まれているタグを判別するためにHTML解析を行っています。
実は、「Crete」の開発の中では最も時間がかかったのはこの部分でした。

せっかくなので是非ご活用していただきたくライブラリ化したので、使い方をご紹介します。

ライブラリは以下の6つのファイルで構成されています。名前空間は「CreteLib」です。

・HtmlDocument.cs ・・HTMLドキュメントを表すクラス
・HtmlNode.cs ・・HTMLの要素を表すクラス
・HtmlTextNode.cs ・・HTMLの要素の中で、タグにはさまれたテキスト部分を表すクラス
・HtmlNodeList.cs ・・ノードのリスト
・HtmlParser.cs ・・HTMLを解析するクラス。内部的に利用しているクラスなので直接利用する必要はありません。
・NodeType.cs ・・ノードの種類を表す列挙体


使い方は非常に簡単です。以下のコードでHTMLを解析することが出来ます。


   String source = "<html><body>HTML解析</body></html>";

   HtmlDocument doc = new HtmlDocument();
   doc.Load(source);


解析が完了したら、HtmlDocumentクラスのインスタンスから必要な情報を取り出すことができます。
GetNodesByTagName(String tagName)は、引数に指定されたタグ名のノードの一覧を返すメソッドです。
タグ名の指定は、大文字、小文字を問いません。

以下のコードは、aタグの一覧を取得し、そのhref属性をコンソールに表示するサンプルです。

   HtmlNodeList nodeList = doc.GetNodesByTagName("a");

   foreach (HtmlNode node in nodeList)
   {
       Console.WriteLine("node:{0}", node["href"]);
   }

HtmlDocumentクラスには他にも、タグに含まれるテキストによりノードの一覧を取得するGetNodesByText()や
属性の値により、ノードの一覧を取得するGetNodesByAttribute()があります。

Htmlのノードには、HtmlNodeクラスとHtmlTextNodeクラスがありHtmlTextNodeクラスがHtmlNodeクラスを継承しています。
HtmlNodeクラスは、HTMLのタグ要素を表し、HtmlTextNodeはタグに挟まれたテキスト部分を表します。

HtmlNodeクラスは、TagNameやAttributes(属性)、ChildNodes(子ノードのリスト)、InnerText(タグに挟まれた文字列)などのプロパティが
あります。ChildNodesを移動していくことで、HTMLのツリー構造を解析することができます。

InnerTextは、ChildNodesを連結したものです。
以下にHtmlTextNodeクラスのText属性との違いを例示します。


<div> ・・HtmlNode
テキスト1  ・・HtmlTextNode
<br>   ・・HtmlNode
テキスト2  ・・HtmlTextNode
</div>


HtmlTextNodeのテキスト属性には、それぞれ「テキスト1」や「テキスト2」が格納されています。
一方、divタグのInnterTextには「テキスト1<br>テキスト2」が格納されます。ただし、さらに子供の要素
をもつタグについては無視しています。

ライセンスフリーでソースも公開していますので、是非お使いください。
バグやご要望、なんでもかまいませんのでフィードバックいただけるとうれしいです。

CreteLibのダウンロード
ソースのダウンロード


コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://csfun.blog49.fc2.com/tb.php/19-5f4997c1

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。