Специальный шаблон для первого элемента - PullRequest
5 голосов
/ 19 мая 2010

У меня есть шаблон:

<xsl:template match="paragraph">
    ...
</xsl:template>

Я называю это:

<xsl:apply-templates select="paragraph"/>

Для первого элемента мне нужно сделать:

<xsl:template match="paragraph[1]">
    ...
    <xsl:apply-templates select="."/><!-- I understand that this does not work -->
    ...
</xsl:template>

Как позвонить <xsl:apply-templates select="paragraph"/> (для первого элемента paragraph) из шаблона <xsl:template match="paragraph[1]">?

Пока что у меня есть что-то вроде петли.


Я решаю эту проблему так (но мне это не нравится):

<xsl:for-each select="paragraph">
    <xsl:choose>
        <xsl:when test="position() = 1">
            ...
            <xsl:apply-templates select="."/>
            ...
        </xsl:when>
        <xsl:otherwise>
            <xsl:apply-templates select="."/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:for-each>

Ответы [ 2 ]

6 голосов
/ 19 мая 2010

Одним из способов сделать это может быть использование именованного шаблона, и иметь как первый, так и другие абзацы, вызывающие этот именованный шаблон.

<xsl:template match="Paragraph[1]">
   <!-- First Paragraph -->
   <xsl:call-template name="Paragraph"/>
</xsl:template>

<xsl:template match="Paragraph">
   <xsl:call-template name="Paragraph"/>
</xsl:template>

<xsl:template name="Paragraph">
   <xsl:value-of select="."/>
</xsl:template>

Еще один способ - вызывать apply-шаблоны отдельно для первого абзаца и других абзацев

  <!-- First Paragraph -->
  <xsl:apply-templates select="Paragraph[1]"/>

  <!-- Other Paragraphs -->
  <xsl:apply-templates select="Paragraph[position() != 1]"/>
2 голосов
/ 19 мая 2010

Назовите свой шаблон paragraph, затем вызовите его по имени из шаблона paragraph[1]:

<xsl:template match="paragraph" name="paragraph-common"> 
    ... 
</xsl:template>

<xsl:template match="paragraph[1]">
    ...
    <xsl:call-template name="paragraph-common"/>
    ...
</xsl:template>

Шаблон может иметь атрибуты match и name. Если вы установите оба, вы можете вызвать шаблон как xsl:apply-templates, так и xsl:call-template.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...