Ваш шаблон выглядит нормально, но вы уверены, что хотите использовать following
?Например, этот шаблон:
<xsl:template match="a">
<a><xsl:apply-templates select="m[following::y]"/></a>
<b><xsl:apply-templates select="m[following-sibling::y]"/></b>
</xsl:template>
... применяется к следующему XML:
<a>
<x/>
<m>match</m>
<y/>
<m>no match</m>
<nested>
<m>match 2</m>
<y/>
</nested>
</a>
... выводит следующий результат:
<a>matchno match</a>
<b>match</b>
Первый apply-templates
соответствует <m>no match</m>
, поскольку following
включает в себя все узлы, следующие за контекстным узлом в порядке документа, который включает в себя вложенный <y/>
.
Второй шаблон соответствует только родным элементам.
Для полноты я добавлю следующий шаблон, который соответствует только тем <m>
узлам, чей немедленный следующий брат или сестра <y>
:
<xsl:template match="a">
<a><xsl:apply-templates select="m[following-sibling::*[1][self::y]]"/></a>
</xsl:template>
Этот шаблон выводитс учетом приведенного выше XML:
<a>match</a>