管理人のページ

特設ページ
このブログについて
管理人へのご連絡はこちら
メモファイル管理&暗号化ソフト(ヤンマ) バグ、要望 まとめ
最新コメント
シンイち。(2019/08/28 04:04:37)
表示系はちょっと無理やりなので(改行マークやタブマーク)処理が重いと出たりするかもしれません…トリガわかったらご報告していただけるとありがたいです!
moondoldo(2019/08/07 15:24:59)
ぐ…今はその症状が出ません…何のトリガーでそうなるんだろう???
moondoldo(2019/08/07 14:14:10)
1.20にて…設定で「改行マークを表示する」にすると改行マークが表示されるが、何故か上6行ぐらい改行が表示されないバグがあります
moondoldo(2019/06/06 21:42:49)
ばっちりです、ありがとうございます
シンイち。(2019/06/05 10:33:09)
moondoldoさま、1.20でおそらくご希望の動作になっていると思いますがいかがでしょうか?
HtmlAgilityPack でHTML出力
更新日時:2017年05月25日
プログラム / ソフトウェア
最近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)っぽい記事も書いてみました…(笑)

コメント

新規コメント
書き込む前にチェックしてください
@PRCOkusawaさんの