Ответ 1
Ваш первый тест xsl: when здесь неверен
<xsl:when test="actor[count(*) > 1]/name">
Вы уже позиционированы здесь на элементе актер, поэтому он будет искать элемент актер, который является дочерним элементом текущего актера, и ничего не обнаружил.
Вероятно, вы просто хотите это сделать
<xsl:when test="count(*) > 1">
В качестве альтернативы вы можете сделать это
<xsl:when test="*[2]">
i.e, есть ли элемент во второй позиции (который сохраняет подсчет всех элементов, когда вы действительно хотите проверить, что их более одного),
Или, возможно, вы хотите проверить, что текущий элемент актер имеет элемент, отличный от name?
<xsl:when test="*[not(self::name)]">
В стороне, возможно, лучше поставить тест в соответствие шаблону, а не использовать xsl: выберите.
Попробуйте этот XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8" omit-xml-declaration="no"/>
<xsl:template match="/">
<div>
<xsl:apply-templates select="database/movies/movie"/>
</div>
</xsl:template>
<xsl:template match="movie">
<xsl:value-of select="concat('Title: ', title)"/>
<br/>
<xsl:text>Actors: </xsl:text>
<xsl:apply-templates select="actors/actor"/>
<br/>
</xsl:template>
<xsl:template match="actor">
<xsl:value-of select="name"/>
<br/>
</xsl:template>
<xsl:template match="actor[*[2]]">
<a href="actor_details.php?actorID={@actorID}">
<xsl:value-of select="name"/>
</a>
<br/>
</xsl:template>
</xsl:stylesheet>
Обратите внимание, что XSLT-процессор должен сначала соответствовать более конкретному шаблону в этом экземпляре.