Я играл с XML + XSL как инструментом для генерации электронных писем в формате HTML.Поскольку код электронной почты так сильно зависит от устаревшей разметки и встроенных стилей, я подумал, что было бы неплохо извлечь фактический контент из всего сумасшествия, необходимого для его форматирования.
Но по мере продвижения вперед и создания большегошаблоны, я обнаруживаю, что повторяюсь все больше и больше.Есть ли способ высушить таблицы стилей XSL, или мне придется засорять мои XML-файлы элементами представления?Давайте возьмем этот фрагмент XML в качестве примера:
<root>
<headline>Hello</headline>
<button>Click me</button>
</root>
И заголовок, и кнопка нуждаются в некотором html вокруг них (например, H1
и div
), но поскольку мы говорим оэлектронная почта, им также нужны ячейка таблицы, строка таблицы и таблица, например:
<table>
<tr>
<td>
<h1>Hello</h1>
</td>
</tr>
</table>
<table>
<tr>
<td>
<div>Hello</div>
</td>
</tr>
</table>
Таким образом, наивное решение состоит в том, чтобы включить эту разметку таблицы в таблицу стилей каждого элемента, например:
<xsl:template match="headline">
<table>
<tr>
<td>
<h1>
<xsl:apply-templates/>
</h1>
</td>
</tr>
</table>
</xsl:template>
Но скажем, что во время тестирования я обнаружил ошибку в Outlook 2007, которая означает, что всем этим таблицам-оберткам требуется дополнительный атрибут: cell-padding=0;
.Если я жестко закодировал разметку таблицы, мне, возможно, придется воспользоваться десятками шаблонов, чтобы распространить это исправление.
Есть ли способ создать «частичный» шаблон таблицы-оболочки и ссылаться на них вотдельные шаблоны для заголовка и кнопки?
Я знаю, что могу просто поменять разметку, чтобы она выглядела так:
<root>
<table>
<headline>Hello</headline>
</table>
<table>
<button>Click me</button>
</table>
</root>
Но это похоже на то, как пнуть банку в будущем.Что если я узнаю, что из-за ошибки в мобильном приложении Gmail все td
нуждаются в собственном объявлении стиля?Тогда решение состоит в том, чтобы пойти и изменить разметку так, чтобы она была неотличима от конечного результата, и в этот момент, что на самом деле делают шаблоны XSL?
Я пробовал решение с call-template
, ноне получил нигдеЛюбой совет будет оценен!