Не совсем ... По крайней мере, в том смысле, что вы пытаетесь это сделать. Переменные в XSLT являются неизменными, когда вы присваиваете им значение, вы не можете их изменить, поэтому попытка вызвать foo несколько раз для изменения значения флага не будет работать. Вы можете попробовать несколько шаблонов, которые могут выполнить то, что вы пытаетесь сделать, например:
<xsl:variable name="myFlag"><xsl:apply-templates select="foo" /></xsl:variable>
<xsl:template match="bla">
<xsl:apply-templates select="bar" /> <!-- Can use the value of $myFlag --.
</xsl:template>
Что будет работать, если шаблон foo создан для возврата значения флага, однако, если значение флага должно изменяться с течением времени, единственный реальный способ сделать это - включить вызов foo в шаблон бара.
<xsl:template match="bla">
<xsl:apply-templates select="bar"> />
</xsl:template>
<xsl:template match="bar">
<xsl:variable name="flag"><xsl:apply-templates name="foo" /></xsl:variable>
<xsl:if test="$flag=1">
</xsl:if>
</xsl:template>