【发布时间】:2010-11-04 15:05:41
【问题描述】:
我打算实现 Martin Fowler 的Two-Step View Pattern 用于在我正在编写的 Web 应用程序中呈现 HTML。一般的想法是,它不是让应用程序输出原始 HTML,而是输出一个自定义的中间 XML,然后将其转换为 HTML/CSS。这具有许多优点,包括减少代码重复和更一致的输出。
Fowler 建议的将 XML 转换为最终 HTML 的方法是使用 XSLT。
我以前使用过 XSLT,并且我了解基本知识。但是,我想知道使用 XSLT 有什么好处。我正在考虑的另一种方法如下所示:
这是第一个渲染步骤的示例 XML 输出:
<grid>
<headingRow>
<cell>Product</cell>
<cell>Price</cell>
</headingRow>
<row>
<cell>A product</cell>
<cell type="price">$54.95</cell>
</row>
</grid>
以及所需的最终 HTML 输出:
<table class="grid">
<tr>
<th>Product</th>
<th>Price</th>
</tr>
<tr>
<td>A product</td>
<td>
<span class="currency_symbol">$</span>
<span class="decimal_number">54.95</span>
</td>
</tr>
</table>
我正在考虑的方法是每个标签都有一个对象。
class GridTag extends Tag {
...
public void render() {
System.out.println("<table class=\"grid\">");
foreach(Tag child: children) {
child.render();
}
System.out.println("</table>");
}
...
}
对象将通过解析 XML 构造成树。 render() 方法将在根节点上调用。我特别喜欢这种方法,因为它可以让我做一些很酷的事情。特别是,如果我有一个带有属性 type="price":
的单元格标签<cell type="price">$54.95</price>
它的关联Tag类可以解析标签的内容,将货币符号和数值分隔成单独的HTML标签,以允许货币符号和小数点对齐,如上面的HTML输出所示。
<td>
<span class="currency_symbol">$</span>
<span class="decimal_number">54.95</span>
</td>
问题:
我应该这样做还是应该使用 XSLT? 我可能会错过使用 XSLT 的哪些优势? 如果我应该使用 XSLT,我将如何解析价格标签的内容?
【问题讨论】: