2010-05-19 5 views
4

У меня есть шаблон:Конкретная шаблон для первого элемента

<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

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

<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> 

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

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

    <!-- Other Paragraphs --> 
    <xsl:apply-templates select="Paragraph[position() != 1]"/> 
2

Имени вашего общий 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.

Смежные вопросы