XPath:
//person
выбирает все персональные элементы независимо от того, где они находятся во входных данных XML (см. здесь ).
Инструкция XSLT:
<xsl:for-each select="//person">
Итерирует по всем элементам персонажа, выбранным этим XPath.В каком бы контексте вы ни использовали эту инструкцию, преобразование должно повторяться для всех трех элементов.Это не так в ситуациях, подобных (с учетом примера ввода, приведенного в вашем вопросе):
<xsl:template match="/data/people[1]">
<xsl:for-each select=".//person">
<xsl:value-of select="name(.)"/>
</xsl:for-each>
</xsl:template>
, где вы явно выбираете все элементы персонажа, начиная с определенного контекста.В таком случае, и я думаю, что только в таком случае вы будете повторять только первые два элемента.
Поэтому в ваших тестах есть что-то странное.