>>94
http://www.asahi-net.or.jp/~ps8a-okzk/xml/xslt10_1/conflict_resolution.html
> これでもなお最も高い優先順位を持ったテンプレートルールが複数存在する場合、 エラ
> ーとなる可能性があります。 XSLT仕様書を読むと、エラーとするか、一番最後に書かれ
> たテンプレートルールを採用するかを、 XSLTプロセッサが選択することになっています。

という理由。

なんか教えてあげたやつがどういう風に動いてるか理解してないんじゃないか
という気もするんだけど、とりあえずこうやればできるよ。

<xsl:template match="/root/tag1/tag2">
<xsl:apply-templates select="tag3//text()">
<xsl:with-param name="i">1</xsl:with-param>
</xsl:apply-templates>

<xsl:apply-templates select="tag3//text()">
<xsl:with-param name="i">2</xsl:with-param>
</xsl:apply-templates>
</xsl:template>

<xsl:template match="text()">
<xsl:param name="i" />
<xsl:if test="../@ID=$i">
<xsl:value-of select="."/>
</xsl:if>
</xsl:template>

あるいはその奇妙な書き方のXMLをやめて入門書の例を
真似てみたほうがいいかも?