Определенный шаблон для первого элемента

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

<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>
5
задан QuantumMechanic 2 May 2012 в 00:44
поделиться

2 ответа

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

<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-templates отдельно для первого и других абзацев

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

  <!-- Other Paragraphs -->
  <xsl:apply-templates select="Paragraph[position() != 1]"/>
6
ответ дан 14 December 2019 в 04:32
поделиться

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

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

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

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

2
ответ дан 14 December 2019 в 04:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: