Я тут потихоничку (вот уже второй день
) работаю над созданием макроса xml-литерал.
Общая идея такая... в коде можно будет описывать ХМЛ-литералы на подобие того как это сделано в ВБ. На выходе будет линковских XElement. Они будут подерживать классические немерловые квази-цитаты.
Кроме того я планирую сделать их "активными". Это значит, что вних можно будет описывать логику генерации ХМЛ-я. Причем прямо в виде ХМЛ-атрибутов. Идея повзаимствована из рендереров ХТМЛ-я наподобии Спарка.
Так вот хочется обсудить синтаксис для встроенных в ХМЛ конструкций управляющих логикой генерации.
Я набросал пример того что я хочу видеть в данном движке. Прошу поглядеть его и высказать свои мысли (что добавить, что плохо и т.п.)
def x = 1;
def y = 0;
def zs = [...];
def var = xml <#
<root>
<table when="x > 0">
<tr if="y == 0">
<td foreach="z in zs">$z</td>
</tr>
<tr else-if="y < 0"></tr>
<tr else="y > 0"></tr>
<if cond="y == 0">
<tag1></tag1>
<tag2></tag2>
<tag3></tag3>
</if>
<else-if cond="y > 0">
<tag2></tag2>
<tag3></tag3>
</else-if>
<else>
<tag3></tag3>
</else>
$(if (y == 0)
xml <#
<tag2></tag2>
<tag3></tag3>
#>
else if (y > 0)
xml <#
<tag2></tag2>
<tag3></tag3>
#>
else if (y > 0)
xml <# <tag3></tag3> #>
)
</table>
</root>
#>;
Особые проблемы возникли с дизайном множественного if-а (позволяющего включить несколько тегов на основании некоторого логического условия). В конце этого примера я привел вариант основанный на теге <if> (который сам не включается в результирующих ХМЛ) и на базе обычного сплайса (здесь код приведен по месту, но конечно же он может быть вынесен во вне ХМЛ-цитаты, так что она будет выглядеть приличнее).
Насколько такой подход (с использованием управляющих тегов аля XSLT) приемлем?
Ну, и вообще, какие есть мысли по этому поводу?