XSLT - compte le nombre d'éléments enfants en utilisant XPath
J'ai le fichier XML suivant qui stocke les films et les acteurs de détails:
<database
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="movies.xsd">
<movies>
<movie movieID="1">
<title>Movie 1</title>
<actors>
<actor actorID="1">
<name>Bob</name>
<age>32</age>
<height>182 cm</height>
</actor>
<actor actorID="2">
<name>Mike</name>
</actor>
</actors>
</movie>
</movies>
</database>
Si le actor
élément contient plus d'un des éléments d'enfant (dans ce cas c'est le nom, l'âge et la hauteur) puis je veux afficher son nom
en tant que lien hypertexte.
Si, toutefois, la actor
élément ne contient qu'un seul élément enfant (nom), alors il devrait être affiché comme du texte brut.
XSLT:
<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:choose>
<xsl:when test="actor[count(*) > 1]/name">
<a href="actor_details.php?actorID={@actorID}">
<xsl:value-of select="name"/>
</a>
<br/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="name"/>
<br/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Dans ce cas, Bob doit être affiché comme un lien hypertexte, et Mike doivent être affichés sous forme de texte brut. Cependant, ma page affiche les deux
Bob et Mike en tant que texte brut.
source d'informationauteur Alex
Vous devez vous connecter pour publier un commentaire.
Votre premier xsl:when test est incorrect ici
Vous êtes déjà positionné sur un acteur élément ici, ce sera donc à la recherche d'un acteur élément qui est un enfant de l'actuel acteur élément, et ne trouvant rien.
Vous avez probablement juste de vouloir faire ce
Sinon, vous pourriez le faire
je.e, est-il un élément dans la deuxième position (qui enregistre le comptage de tous les éléments, si vous ne voulez vérifier il n'y a plus d'un),
Ou peut-être vous voulez vérifier le courant acteur élément est un élément autre que nom?
En aparté, il pourrait être préférable de mettre l'essai dans un template match, plutôt que d'utiliser un xsl:choisissez.
Essayer cette XSLT
Noter que le processeur XSLT doit correspondre à la plus spécifique de modèle en premier dans cette instance.