У меня есть XML, содержащий серию шагов. Я пытаюсь сбросить нумерацию шагов, когда появляется заголовок.
Каждый шаг будет содержать один или несколько элементов «пара».
Каждый шаг может дополнительно содержать один элемент «заголовок».
Каждый шаг должен получить последовательный номер, однако, когда появляется заголовок, нумерация шагов должна начинаться заново.
Это должно быть выполнено с помощью XSLT 1.0/XSL:FO.
XML:
<top>
<Step>
<title>Toilet Paper Holder</title>
<para>It holds toilet paper.</para>
<para>It holds 1 roll.</para>
</Step>
<Step>
<para>It is red.</para>
</Step>
<Step>
<para>It is metal.</para>
</Step>
<Step>
<title>Toilet</title>
<para>You sit on it.</para>
</Step>
<Step>
<para>It is white.</para>
</Step>
<Step>
<para>It is porcelain.</para>
</Step>
</top>
XSL:
<xsl:template match="Step">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="title">
<fo:block>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
<xsl:template match="para">
<fo:block>
<xsl:if test="not(preceding-sibling::para)">
<xsl:number count="Step[child::para]" from="top" format="1."/>
</xsl:if>
<xsl:text> </xsl:text>
<xsl:apply-templates/>
</fo:block>
</xsl:template>
Текущий вывод:
Toilet Paper Holder
1. It holds toilet paper.
It holds 1 roll.
2. It is red.
3. It is metal.
Toilet
4. You sit on it.
5. It is white.
6. It is porcelain.
Желаемый результат:
Toilet Paper Holder
1. It holds toilet paper.
It holds 1 roll.
2. It is red.
3. It is metal.
Toilet
1. You sit on it.
2. It is white.
3. It is porcelain.