I'm afraid I don't understand the notation that you are using to express your requirement, that is: IF<INTRO;PURCHASE;APR> != âNoneâ or is NOT equal to <GOTO;PURCHASE;APR>.
I don't know what you're trying to achieve with
Intro[@Tier = *]
what this actually means is "select all the Intro elements whose @Tier attribute is equal to one of their child elements".
This clause also looks wrong:
not(Purchase/@APR != /Goto[@Tier = *]/Purchase/@APR)
/Goto will select a Goto element at the top level of the document. You haven't shown the top level of your document, but somehow I doubt it is a Goto element.
I suspect you're trying to construct a join query using "*" as a range variable. Joins are quite hard (sometimes impossible) in a single XPath 1.0 expression. You probably need to move up to the XSLT level:
<xsl:variable name="top" select="."/>
<xsl:for-each select="Intro">
<xsl:variable name="Tier" select="@Tier"/>
<xsl:for-each select="$top/Goto">
<xsl:if test="@Tier != $Tier">...
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference