输入
<?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>
样式表
<?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>
问题:我需要打印“名称”元素下的所有标题文本值。但是,如果之前的 hading 存在类似的文本值,则应在文本值之前添加 position() 编号。我只需要通过变量来执行此操作,如果您可以在变量 name1 中看到,我正在尝试输入一些逻辑来比较前一个标题的值,如果遇到类似的文本,然后输入位置编号,但不知何故无法实现这一目标。你能帮我在变量名1中写同样的逻辑吗?在此先感谢您的帮助。
_ _ ___已编辑_ __ _ __ _ __
<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">