У меня есть следующий шаблон (отрывок):Выберите шаблон на основе атрибута определяется порядок
<xsl:template match="section[@visible='1']">
<dl>
<dt><xsl:call-template name="content"/></dt>
<xsl:apply-templates select="(page|file)[@visible='1']" />
<xsl:apply-templates select="section[@visible=1]" mode="child" />
</dl>
</xsl:template>
<xsl:template match="section[@visible='1']" mode="child">
<dd><xsl:apply-templates select="." /></dd>
</xsl:template>
Моя проблема заключается в конце двух apply-template
элементов. Исходные XML-элементы (страница, файл, раздел, ...) имеют атрибут pos
, содержащий число, которое определяет, когда они должны быть добавлены к выходу. Но способ, который у меня есть в настоящее время, предотвращает с более низким значением pos
, которое должно отображаться перед элементом page
с более высоким положением, например.
Как я могу это достичь? Я попытался это:
<xsl:template match="section[@visible='1']">
<dl>
<dt><xsl:call-template name="content"/></dt>
<xsl:call-template name="kids"/>
</dl>
</xsl:template>
<xsl:template name="kids">
<xsl:for-each select="node()">
<xsl:sort select="@pos"/>
<!-- what would go here? -->
</xsl:for-each>
</xsl:template>
Но я не знаю, что поставить в петлю for-each
. Я мог бы просто дублировать существующие 2 шаблона, пощекотать им имя, а затем вызвать их с текущим узлом в качестве параметра, но это не будет СУХОЙ. Должен быть лучший способ.
Мне нужна часть 'mode =" child "' 'для шаблона' section' (который отличается от того, который показан). Как вы это включили? – DanMan
Извините, я пропустил это. Я отредактировал ответ, чтобы показать, как справиться с этим. –
Mind = взорван. Благодарю. – DanMan