parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

чтобы убрать жесткую привязку в входящим узлам и последовательности

insomnia 12.05.2007 16:20

Marat все грамотно написал, так что то же самое, другими словами )

хочется отделить рамку от данных, находящихся с ней,
чтобы менять рамку для одних и тех же данных
чтобы менять данные для одной о той же рамки

нужно сделать так, чтобы в рамке находился только один объект,
то, что вы и делаете, передавая в функцию один параметр
^frame[^forum[]]
<frame><forum /></frame>
<frame><thread /></frame>
<frame><message /></frame>

если известно, что находится внутри:
<xsl:template match="frame">
<xsl:apply-templates select="forum" />
<xsl:apply-templates select="thread" />
<xsl:apply-templates select="message" />
...
</xsl:template>

если не известно, что находится внутри:
<xsl:template match="frame">
<xsl:apply-templates />
</xsl:template>

<xsl:template match="frame/forum" />
<xsl:template match="frame/thread" />
<xsl:template match="frame/message" />

во втором случае шаблон выбирается автоматически
это примерно как Shape.draw()

рамка и данные в ней параметризуются именно через xml, а не xslt
при разборе фрагмента
<frame type="red"><message /></frame>

шаблоном
<xsl:template match="frame" />
<xsl:template match="frame[@type = "red"] priority="1" />
<xsl:template match="frame[@type = "blue"] priority="1" />
<!-- общий вид сообщения на форуме -->
<xsl:template match="message" />
<!-- вид сообщения, если он внутри рамки -->
<xsl:template match="frame/message" priotity="1" />

будет сначала вызван шаблон для построения красной рамки,
а внутри него будет вызван шаблон для построения сообщения в том месте рамки, где оно должно появиться

обратите внимание, как именно расположены элементы сообщения (имя пользователя, время, заголовок, текст) определяется в шаблоне message, в котором можно вывести их в любом порядке

структура узлов действительно будет жесткая:
сообщение в рамке - это <frame><message /></frame>
уже нельзя в xml написать <message />, а в xsl его обрамить

с другой стороны, рамка - это тоже важный блок страницы, и его отображение может меняться в разных языковых версиях сайта