The syntax for the xsl:if test=.. statement is wrong. Here it is not a string test but an element test, so it will try to find an element called <link=> – which is actually an invalid element name in XML.
You can simply test (no pun intended) with
<xsl:if test="link">there is a child element called "link"</xsl:if>
and
<xsl:if test="not(link)">there is no child element called "link"</xsl:if>
.. but XSLT is very literal-minded, and so you still might not get what you want. Suppose your input file contains empty <link> elements, such as
<link></link>
or (more insidious)
<link>
</link>
– which is "more insidious" because the element actually contains data.
So a better test is against both the presence of an element <link> and whether or not it actually contains textual data instead of only whitespace. Fortunately, you can use the normalize-space function to first discard all whitespace and then test if there is anything left. The following template does that:
<xsl:template match="movie">
<td>
<xsl:if test="normalize-space(link)">
<!-- Look for link, target to blank, the link text is the tittle pulled from xml -->
<a href="{link}" target="_blank">
<xsl:value-of select="title" />
</a>
</xsl:if>
<xsl:if test="not(normalize-space(link))">
<xsl:value-of select="title" />
</xsl:if>
</td>
</xsl:template>
If you have more than one option to test against, you can chain them in both <xsl:if> sequences, but you have to remember to insert all options in both statements, or you may get a double output of title. A more versatile solution is to use a list of options:
<xsl:template match="movie">
<td>
<xsl:choose>
<xsl:when test="normalize-space(link)">
<!-- Look for link, target to blank, the link text is the tittle pulled from xml -->
<a href="{link}" target="_blank">
<xsl:value-of select="title" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="title" />
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
You can add <xsl:when> lines for each case, and only if none of them match, it'll automatically fall through to the default otherwise action, which merely writes out the title.
link[=]to be an element or attribute, not literal text. (The reason your attempt does not work, by the way, is because you do the exact same test twice.)