... I call it:

Specific template for the first item

I have a template:

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

I call it:

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

For the first item I need to do:

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

How to call <xsl:apply-templates select="paragraph"/> (for the first paragraph element) from a template <xsl:template match="paragraph[1]"> ?

So far I have something like a loop.


I solve this problem like this (but I don't like it):

 <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> 
+4
source share
2 answers

One way to do this is to use a named template and have both the first and other paragraphs invoking that named template.

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

Another way is to invoke apply templates separately for the first paragraph and other paragraphs.

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

Name the common paragraph pattern, then call it by name from the paragraph[1] pattern paragraph[1] :

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

A template can have both a match attribute and a name attribute. If you set both parameters, you can call the template as xsl:apply-templates and xsl:call-template .

+2
source

Source: https://habr.com/ru/post/1310203/


All Articles