我接管了一个能够打印信息的C#(2.0)代码库。执行此操作的代码非常繁琐。元素被绘制到每个页面上,魔术常量代表定位。我想程序员坐着一把尺子,通过测量和输入位置来设计每一页。是的,人们当然可以提出一些很好的抽象来使这种方法合理化。但我正在寻找一种不同的方法。
我的想法是,我将使用生成静态HTML页面的代码替换当前打印的代码,将它们保存到文件中,然后在该文件上启动Web浏览器。最明显的好处是我不需要处理格式化 - 我可以让网页浏览器为我做标记和CSS。
所以我正在寻找的是一组非常轻量级的类,我可以使用它来帮助生成HTML。我不需要像HTMLTextWriter那样重量级的东西。我正在寻找的是避免像这样的碎片:
String.Format("<tr><td>{0}</td><td>{1}</td></tr>", foo, bar);
而是采取这种感觉:
...
table().
tr().
td(foo).
td(bar)
或类似的东西。我见过其他语言的轻量级类,但找不到C#的等价(或更好)。我当然可以自己写,但我坚信不要重新发明轮子。
知道这样的事吗?知道什么更好比这个?
答案 0 :(得分:1)
就像一个想法:为什么要在应用程序代码中组装HTML?对我来说听起来有点乏味。您可以聚合报告所需的数据,并将其传递给C#现有的模板引擎(通常用于Web应用程序)。然后将模板引擎的结果保存到html文件中。
我用这种方法看到的主要好处是:
我还没有使用它,但我听说Spark View引擎没问题:http://sparkviewengine.com/(不确定它是否适用于C#2.0)
前段时间我用Gagawa(http://code.google.com/p/gagawa/)试验(用PHP),你可以在那里做以下事情:
$div = new Div();
$div->setId("mydiv")->setCSSClass("myclass");
$link = new A();
$link->setHref("http://www.example.com")->setTarget("_blank");
$div->appendChild( $link );
但很快就采用了这种方法来支持模板引擎。
答案 1 :(得分:0)
另一种方法是将数据转换为XML并应用XSL样式表。要更改HTML格式,您只需要替换样式表。