Введите
<?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>
Вывод должен быть
<?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>
1007 * стилевой *
<?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>
Проблема: мне нужно напечатать все значения текста заголовка в элементе name. Но если есть аналогичное текстовое значение, присутствующее для предыдущего хединга, то оно должно добавить число position () перед текстовыми значениями. Мне нужно сделать это только через переменную, если вы видите в переменной name1, я пытаюсь поместить некоторую логику, которая будет сравнивать значение предыдущего заголовка, и, если встретится с подобным текстом, тогда введите номер позиции, но каким-то образом не могу достичь этого. Можете ли вы помочь мне написать ту же логику в переменной name1. Заранее спасибо за помощь.
__ _ ___ Отредактировано _ __ _ __ _ __
<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">