Entréevaleurs de texte Stockage dans la variable des noeuds précédents
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<Concept>
<Heading-1>This is First Heading</Heading-1>
</Concept>
<Concept>
<Heading-2>This is Second Heading</Heading-2>
</Concept>
<Concept>
<Heading-2>This is First Heading</Heading-2>
</Concept>
</XML>
sortie doit être
<?xml version="1.0" encoding="UTF-8"?>
<name>This_is_First_Heading</name>
<name>This_is_Second_Heading</name>
<name>1_This_is_First_Heading</name>
Stylesheet
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl" version="2.0">
<xsl:template match="Concept">
<xsl:variable name="name"
select="./Heading-1/text() | ./Heading-2/text()"/>
<xsl:variable name="name1"
select="if //Cocept/Heading-1/text()=$name
then concat(position(), '_' $name)}
else $name"/>
<name>
<xsl:value-of select="replace($name, ' ', '_')"/>
</name>
</xsl:template>
</xsl:stylesheet>
Problème: Je dois d'imprimer toutes les valeurs de texte rubrique sous " nom "élément". Mais s'il y a une valeur de texte similaire présente pour le hading précédent, il faut ajouter le numéro de position() avant les valeurs du texte. Je dois le faire si variable seulement, si vous pouvez voir dans Variable name1 j'essaie de mettre une logique qui va comparer la valeur du cap précédent et si trouver le texte similaire, puis mettre le numéro de position, mais en quelque sorte ne suis pas en mesure de atteindre cela. Pouvez-vous s'il vous plaît m'aider à écrire la même logique dans le nom de variable1. Merci d'avance pour votre aide.
__ _ ___Edité_ __ _ __ _ __
<xsl:template match="Concept">
<xsl:variable name="name"
select="if (./Heading-1[1] |
./Heading-2[1] |
./Heading-3[1] |
./Heading-4[1] |
./Heading-5[1])
then normalize-space((Heading-1[1] |
Heading-2[1] |
Heading-3[1] |
Heading-4[1] |
Heading-5[1])
/text()[position()=last()])
else normalize-space(./Heading-2[1]/text()[2])"/>
<xsl:variable name="name1"
select="if (//Concept/Heading-3/text()
[position()=last()] = $name)
then concat(position(), '_', $name)
else $name"></xsl:variable>
<xsl:variable name="name2"
select="if (string-length($name5)=0)
then concat(position(), '_', $name5)
else $name5"/>
<xsl:result-document href="XML/{replace($name2, ' ', '_')}.xml"
format="testing" validation="strip">
Pouvez-vous publier l'entrée et la feuille de style en XML s'il vous plaît? Ensuite, expliquez si vous souhaitez transformer l'entrée XML en XML ou HTML, en XHTML ou en texte brut. –
Votre édition n'a aucun sens pour moi ... –
@ Bonne question, +1. Voir ma réponse pour une solution complète et très courte. :) –