C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: HTML出力の方法


(過去ログ 17 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■6357 / inTopicNo.1)  HTML出力の方法
  
□投稿者/ まんぼう (17回)-(2007/08/08(Wed) 11:56:24)

分類:[.NET 全般] 

VB2005, WinFormです。
個人的に使うために作った家計簿のレポートをHTMLで出力したいのですが、

…Write "<HTML><TITLE>タイトル</TITLE>…</BODY></HTML>"

こんな感じでやればできるのは分かるのですが、タグを書くのが面倒&タグの打ち間違いチェックも楽をしたいです。

例えば以下の架空のクラス HogeWriter のような使い方ができるものが存在するのなら嬉しいのですが、ありますでしょうか?
贅沢な希望で恐縮していますが、よろしくお願いします。

  Dim hoge AS New HogeWriter("C:\index.html")
  Dim h1 As HtmlElement

  hoge.TITLE = "タイトル"
  h1 = hoge.Add(HogeWriter.TagType.H1, "見出し1")
  h1.Add(HogeWriter.TagType.P, "文章")
  
  …
  hoge.Output()

※上記コードは厳密にこれができる事という条件ではなく、イメージが少しでも伝わればと思い書きました。

引用返信 編集キー/
■6359 / inTopicNo.2)  Re[1]: HTML出力の方法
□投稿者/ Mr.T (74回)-(2007/08/08(Wed) 12:15:01)
Mr.Tです、こんにちは。


No6357 (まんぼう さん) に返信
> VB2005, WinFormです。
> 個人的に使うために作った家計簿のレポートをHTMLで出力したいのですが、
>
> …Write "<HTML><TITLE>タイトル</TITLE>…</BODY></HTML>"
>
> こんな感じでやればできるのは分かるのですが、タグを書くのが面倒&タグの打ち間違いチェックも楽をしたいです。
>
> 例えば以下の架空のクラス HogeWriter のような使い方ができるものが存在するのなら嬉しいのですが、ありますでしょうか?
> 贅沢な希望で恐縮していますが、よろしくお願いします。
>
> Dim hoge AS New HogeWriter("C:\index.html")
> Dim h1 As HtmlElement
>
> hoge.TITLE = "タイトル"
> h1 = hoge.Add(HogeWriter.TagType.H1, "見出し1")
> h1.Add(HogeWriter.TagType.P, "文章")
>
> …
> hoge.Output()

以前、こんな感じのクラスを自分で作って利用したことがあったんです。

確かに、いちいちHTMLを直書きするのは、面倒だし、その方がやりやすいわかりやすい
かなぁと思って...
結果、結果予想がえらくわかりにくくなりましたorz

というのも、直書きの場合は、HTMLの構成が見た目でわかるんですが、
クラスにしてしまうと、何をどこで出力しているのか、順番に見ていかないとパッとみて
じゃわからないんですね。
構造をちょこちょこ変更したい場合なんかは最悪でした。

しかし、プログラムを組むという点においての利用性の高さは、確かにGoodで、
いちいち""""とか書かなくて良くなるとか、打ち間違いがなくなるとか、
あったんですが...

やはり、構造がすぐに見渡せないのはHTMLを記述する上で、私にとっては大きな欠点
なのでそれ以降、利用するのはやめました。
#もう、ソースもどこにいったのか...
#回答ではなく、個人的な感想、意見だけになってしまうので申し訳ないです

引用返信 編集キー/
■6360 / inTopicNo.3)  Re[2]: HTML出力の方法
□投稿者/ Hongliang (163回)-(2007/08/08(Wed) 12:50:52)
Hongliang さんの Web サイト
データは XmlSerializer で XML にして、それを XSLT で HTML に整形……かな?
引用返信 編集キー/
■6361 / inTopicNo.4)  Re[3]: HTML出力の方法
□投稿者/ Moo (81回)-(2007/08/08(Wed) 13:10:52)
No6360 (Hongliang さん) に返信
> データは XmlSerializer で XML にして、それを XSLT で HTML に整形……かな?

テンプレートとなるHTMLファイルを作っておいて、
それを読み込んで別名保存するというのはどうでしょうか

テンプレートとなるHTML内に”[[タイトル]]”等の文字列を書いておき、
そこをReplace(置換)するという方法です。
引用返信 編集キー/
■6363 / inTopicNo.5)  Re[4]: HTML出力の方法
□投稿者/ 囚人 (130回)-(2007/08/08(Wed) 13:17:07)
面白そうなので試しました。こんなのどうです?
Writer も状況に応じて XhtmlTextWriter にするなどできるので柔軟性は結構ありそうです。

using System;
using System.IO;
using System.Web.UI;
using System.Web.UI.HtmlControls;

class Class1
{
    static void Main(string[] args)
    {
        using(MemoryStream stream = new MemoryStream())
        {
            using(HtmlTextWriter htmlWriter = new HtmlTextWriter(new StreamWriter(stream)))
            {
                HtmlGenericControl html = new HtmlGenericControl("html");
                    HtmlGenericControl body = new HtmlGenericControl("body");
                    html.Controls.Add(body);
                        HtmlAnchor anchor1 = new HtmlAnchor();
                        body.Controls.Add(anchor1);

                html.RenderControl(htmlWriter);

                htmlWriter.Flush();
            }

            stream.Position = 0;
            Console.WriteLine(new StreamReader(stream).ReadToEnd());
        }
    }
}


引用返信 編集キー/
■6364 / inTopicNo.6)  Re[4]: HTML出力の方法
□投稿者/ まんぼう (18回)-(2007/08/08(Wed) 13:27:09)
2007/08/08(Wed) 13:28:13 編集(投稿者)

返信の順番が前後しますが…

Hongliang様
ありがとうございます、早速XML経由の方法を調べてみます。

Mr.T様
うーん、確かにそうかもしれません。
おっしゃられたことを考えてみて、タグと内容を分離するだけでも良いのかもしれない気がしてきました。
例えばこんな感じで…

Dim str As String
Dim title As String = "タイトル"
Dim contents As String = "内容…"

str = String.Format("<HTML><TITLE>{0}</TITLE>" _
"<BODY>{1}</BODY></HTML>", title, contents)

タグのチェックはコンパイル時にしてくれれば最高ですが、そこは将来に期待という方向で(^^;

Moo様
なるほどー、あらかじめHTMLファイルを作っておく方法もあるのですね、大変参考になります。
Mr.T様と趣旨的には同じ系統になるのでしょうか。
こちらも検討させて頂きます。

色んな方法があることが分かり、選択肢が増えて嬉しい限りです。
XML経由の方法も含めてそれぞれの方法を詳しく調べてみます。
これも使えるよというような情報がありましたら引き続きお願いいたします。

引用返信 編集キー/
■6365 / inTopicNo.7)  Re[5]: HTML出力の方法
□投稿者/ IIJIMAS (13回)-(2007/08/08(Wed) 13:41:24)
Javaならこんなのありますね。

Jakarta ECS - Element Construction Set
http://jakarta.apache.org/ecs/index.html
引用返信 編集キー/
■6366 / inTopicNo.8)  Re[1]: HTML出力の方法
□投稿者/ 渋木宏明(ひどり) (293回)-(2007/08/08(Wed) 13:57:21)
渋木宏明(ひどり) さんの Web サイト
.NET 標準クラスライブラリの System.Web.UI.HtmlTextWriter クラスでは駄目でしょうか。

引用返信 編集キー/
■6367 / inTopicNo.9)  Re[2]: HTML出力の方法
□投稿者/ 渋木宏明(ひどり) (294回)-(2007/08/08(Wed) 14:02:57)
渋木宏明(ひどり) さんの Web サイト
> .NET 標準クラスライブラリの System.Web.UI.HtmlTextWriter クラスでは駄目でしょうか。

つか、データそのものは XML で出力しておいて、適当な XSL で HTML 化するほうがキレイかも。

引用返信 編集キー/
■6368 / inTopicNo.10)  Re[3]: HTML出力の方法
□投稿者/ 渋木宏明(ひどり) (295回)-(2007/08/08(Wed) 14:14:00)
渋木宏明(ひどり) さんの Web サイト
> つか、データそのものは XML で出力しておいて、適当な XSL で HTML 化するほうがキレイかも。

既出でしたね。

引用返信 編集キー/
■6378 / inTopicNo.11)  Re[4]: HTML出力の方法
□投稿者/ まんぼう (19回)-(2007/08/09(Thu) 09:13:08)
囚人様
おぉ、こんな感じでやりたかったのですよ。
ありがとうございます。これを参考にいろいろ改造してみます。

IIJIMAS様
私の当初のイメージに非常に近いと思いました。
ベタのHTMLと並べてるからかもしれませんが、使い方が分かりやすくてよさげです。

渋木宏明(ひどり)様
XMLを使う方法は応用範囲が広そうですね。勉強しなくちゃ。

皆様ありがとうございました。
今回はまずは手軽でとっつきやすそうなHtmlTextWriterからはじめようかと思います。
ただMr.T様のおっしゃっていた「構造がすぐに見渡せない」という点は確かに気になるので、
最終的にどうするかはいろいろ試してみた上で熟考してみます。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -