Вы совсем не плохо начали, но теперь вам нужно узнать о XSLT Встроенные правила шаблонов . Это шаблоны, которые будут использоваться, когда в вашем XSLT нет подходящего шаблона.
У вас есть шаблон, соответствующий узлу документа /
, в котором вы делаете <xsl:apply-templates />
. Это выберет узел label
, для которого у вас нет шаблона. Таким образом, шаблон по умолчанию это ...
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>
И это выберет узлы options
и statuses
. У вас есть шаблон, соответствующий options
, так что это хорошо, но не один шаблон statuses
, поэтому встроенный снова включается.
Но в вашем шаблоне options
вы делаете <xsl:apply-templates select="/labels/statuses"/>
, что в итоге приводит к тому, что statuses
(и дочерние status
узлы) выбираются дважды.
Одним из решений является изменение <xsl:apply-templates />
в узле /
для явного выбора только options
, например, так ...
<xsl:template match="/">
<form method="POST" action="new-process.php">
<div class="mainC">
<xsl:apply-templates select="labels/options"/>
</div>
<input type="submit" name="submit" value="Submit" />
</form>
</xsl:template>