最近C#(VisualStudio)でツール作ることが多いのですが、HTMLのページを解析する方法を検索すると必ず上がってくるHtmlAgilityPackと言うライブラリがあります。 
 
非常に便利なライブラリなのですが、読み込み&解析だけではなく作成(加工)&出力も出来ます。 
 
ネットでHTML出力方法とか検索してもHtmlAgilityPackを使った方法はあまりヒットしなかったのでメモっておきます。 
  読み込み&解析についてはそこらに転がっているので割愛。 
 
作成(加工)&出力は以下のようにすれば出来ました。 
テーブルを作るサンプルです。 
 
 
// インスタンス作成 
HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument(); 
 
// table タグを作成 
HtmlNode table = html.CreateElement("table"); 
 
// tr タグを作成 
HtmlNode tr = html.CreateElement("tr"); 
 
// td タグを作成 
HtmlNode td = html.CreateElement("td"); 
 
// td へデータを設定 
td.SetAttributeValue("class", "test");	// 属性 class に test を設定 
td.InnerHtml = "表示テキスト";			// 文字列を設定 
 
// 階層を設定 
tr.AppendChild(td); 
table.AppendChild(tr); 
 
// HTML出力 
html.Save("C:\\test.html", Encoding.UTF8); 
 
  
 
 
出力は以下のようになります(C:\test.htmlの内容) 
 
 
<table><tr><td class="test">表示テキスト</td></tr></table> 
 
  
 
こんな感じです。 
非常に簡単です。 
 
上の例ではテーブルタグだけを出力していますが、例えば以下のようなデータがあるとします。 
 
 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> 
<meta http-equiv="Content-Language" content="ja"> 
<title></title> 
</head> 
<body> 
</body> 
</html> 
 
  
 
このデータをファイルから読み込むなりしてstringの変数に設定し、以下のようにするとデータを加工することが出来ます。 
 
 
// 以下の変数に上記のHTMLの内容が入っている想定です。 
// string strHtmlData; 
 
// インスタンス作成 
HtmlAgilityPack.HtmlDocument html = new HtmlAgilityPack.HtmlDocument(); 
 
// table タグを作成 
HtmlNode table = html.CreateElement("table"); 
 
// tr タグを作成 
HtmlNode tr = html.CreateElement("tr"); 
 
// td タグを作成 
HtmlNode td = html.CreateElement("td"); 
 
// td へデータを設定 
td.SetAttributeValue("class", "test");	// 属性 class に test を設定 
td.InnerHtml = "表示テキスト";			// 文字列を設定 
 
// 階層を設定 
tr.AppendChild(td); 
table.AppendChild(tr); 
 
// HTMLを読み込む 
html.LoadHtml(strHtmlData); 
 
// タイトルタグを読み込んでHTMLのタイトルを設定する 
HtmlNode head = html.DocumentNode.SelectSingleNode(@"//head//title"); 
head.InnerHtml = "HTMLのタイトルです"; 
 
// BODYを読み込んでテーブルを挿入します 
HtmlNode body = html.DocumentNode.SelectSingleNode(@"//body"); 
body.AppendChild(table); 
 
// HTML出力 
html.Save("C:\\test.html", Encoding.UTF8); 
 
  
 
 
出力は以下のようになります(C:\test.htmlの内容) 
 
 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> 
<meta http-equiv="Content-Language" content="ja"> 
<title>HTMLのタイトルです</title> 
</head> 
<body> 
<table><tr><td class="test">表示テキスト</td></tr></table> 
</body> 
</html> 
 
  
 
ちょっとしたテンプレートエンジンですね。 
便利です。 
 
タグに複数の属性を設定する方法もあると思うんですが調べ中。 
 
たまにはPRCOkusawa(Program Resource Center Okusawa)っぽい記事も書いてみました…(笑)  |