Comment choisir le grand-parent d'un nœud à l'aide de xslt
Je suis dans une situation où je ne peux vérifier pour le nœud enfant, mais j'ai appliquer les balises pour les grands-parents de cet enfant nœud.
J'ai essayé d'utiliser:
<xsl:call-template name="grandparent" select="parent::parent::node()"/>
et:
<xsl:call-template name="grandparent" select="ancestor::node [@nameofgrandparentnode]"/>
Mais aucun ne fonctionne.
Le niveau de la grand-parent d'un nœud n'est pas fixe, donc je me dis que je ne pouvez pas utiliser [@level=#]. Toutes les idées sur la façon de choisir, il serait grandement apprécié.
EDIT: -- Cette partie a été posté sous une nouvelle question:
Sélectionnant le nœud en utilisant les suggestions de ci-dessous travaillé. Merci! Cependant j'ai aussi besoin de tester par l'attribut de la grand-parent ou d'un petit-nœud.
J'ai essayé:
<xsl:template name"one" match="grandparentnode">
<Tag1>
<xsl:apply-templates select="parentNode" />
</Tag1>
</xsl:template>
<xsl:template name="two" match="grandparentnode[*/*/@grandchildattr='attrValue']">
<Tag2>
<xsl:apply-templates select="parentNode" />
</Tag2>
</xsl:template>
Cependant le modèle "deux" toujours est appelée, et "" est toujours inséré. Même pour le petit-nœuds dont la valeur de l'attribut n'est pas égal à "attrValue'.
Suis-je manqué quelque chose?
<xsl:param>
instruction.La modification n'est pas clair. S'il vous plaît, fournir une complète (mais aussi court que possible) document XML et la feuille de style XSLT (encore une fois, aussi court que possible), que reproduire votre problème. De préférence, demandez ce à une nouvelle question.
Aussi
Even for grandchild nodes whose attribute value is not equal to 'attrValue'
ne peut pas être vrai avec ce modèle grandparentnode[*/*/@grandchildattr='attrValue']
OriginalL'auteur highlightall | 2010-09-09
Vous devez vous connecter pour publier un commentaire.
Certes, il ne sera pas un "travail", parce que le
<xsl:call-template>
instruction n'a pas unselect
attribut!Vous pouvez passer des paramètres à l'aide de
<xsl:with-param>
les enfants de la<xsl:call-template>
instruction, comme ceci:Pour la
select
attribut de la<xsl:with-param>
Utilisation:Pour un vrai grand-parents:
le plus proche ancêtre de l'élément avec le nom
someName
:le plus proche ancêtre de l'élément avec le nom contenu dans la variable
$ancName
:<xsl:with-param> travaillé - merci!
Heureux, il a travaillé. Ici DONC, la gratitude est exprimée en acceptant une réponse. Astuce: cliquez sur la coche en regard de la réponse. 🙂
Cool, tout a fait 🙂 Toutes les suggestions pour les édité partie de la question sur les tests pour les petits-enfants de ses attributs?
J'ai posté une nouvelle question sur le montage: stackoverflow.com/questions/3687466/...
OriginalL'auteur Dimitre Novatchev
XSLT n'est pas de procédure de programmation, de sorte que vous devez penser à des choses un peu différemment.
Si je comprends bien, vous voulez injecter de nouvelles balises (enfant supplémentaire d'éléments ou d'attributs?) dans votre fichier XML, mais vous souhaitez l'ajouter à un ancêtre quand vous trouver un descendant. Votre exemple de code s'affiche à essayer de cibler les grands-parents une fois que vous trouver l'enfant. Malheureusement, c'est peut-être trop tard.
Vous pouvez avoir besoin d'injecter le nouvel élément/attribut lorsque le moteur est livré à travers l'élément que vous voulez modifier (les grands-parents dans votre cas), pas quand il s'agit à travers l'enfant qui correspond à la condition (ou d'autre, vous finirez par l'ajout d'éléments ou d'attributs de l'enfant)
Considèrent cette entrée (grand-parent="album", le petit-fils="label"):
Je veux modifier la
album
basée sur le fait qu'un certainlabel
est présent. Rappelez-vous le format général pour le ciblage des nœuds est:target-node[target-condition]
. Pour modifier n'importe quelalbum
les éléments qui ont unCapitol
étiquette d'un petit-élément, je ne l'utiliserais:Donc considérer cette feuille de style pour ajouter un nouvel attribut et 2 nouveaux éléments enfants de
album
's qui correspondent à mon état:De sortie (mis en forme manuellement):
Certains sandbox de ressources de test:
Merci - consultez ces ressources de test - je les trouve très pratique et utile pour l'expérimentation.
Très utile exemple de code. Merci!
Merci! Notez que j'ai mis à jour la feuille de style afin de résoudre certains bâclée (paresseux) du code. L'apply-templates ligne le 2ème modèle doit avoir été de diviser pour traiter les attributs distincts à partir d'éléments enfants (de sorte que de nouveaux attributs et éléments pourraient être ajoutés à la fois). Fixe maintenant.
F: Si vous voulez vraiment pretify yuor feuille de style, alors vous devriez utiliser littérale éléments comme:
<album new-attribute="A Capitol Record">
OriginalL'auteur Bert F