2009-08-31 63 views
0

我需要使用内容的前三个字母生成TOC部分的序列ID和引用地点的idref。如何从xslt中的内容第一个字母序列生成一个ID?

输入:

<tocentry><title>List of Boxed Readings</title></tocentry> 
<tocentry><title>Foreword</title></tocentry> 
<tocentry><title>About the Author</title></tocentry> 
<tocentry><title>Preface</title></tocentry> 
<tocentry><title>A Dinosaur Dictionary</title></tocentry> 
<tocentry><title>GLOSSARY</title></tocentry> 
<tocentry><title>INDEX</title></tocentry> 

所需的输出:

<p class="Toc-part"><a href="#LOBRSec1">List of Boxed Readings</a></p> 
<p class="Toc-part"><a href="#ForeSec2">Foreword</a></p> 
<p class="Toc-part"><a href="#AtASec3">About the Author</a></p> 
<p class="Toc-part"><a href="#PrefSec4">Preface</a></p> 
<p class="Toc-part"><a href="#ADDSec5">A Dinosaur Dictionary</a></p> 
<p class="Toc-part"><a href="#GLOSSec6">GLOSSARY</a></p> 
<p class="Toc-part"><a href="#INDXSec7">INDEX</a></p> 

请帮我生成内容首字母ID ...

最好的问候, 安东尼

+0

为什么你想要一个可能含糊不清的字母组合*和*在同一个ID中的一个明确的计数器。从我所看到的,调用Sec1..SecN这个段就足够了,而把它们叫做“'LOBRSec1”“却什么也没有买到,而造成了额外的工作。 – Tomalak 2009-08-31 08:39:52

+0

这些部分是部分标题,我已经给章节标题和章节标题给出了“sect1到secN ..”,所以前面的标题需要按照它们名字的第一个字母顺序排列,这将有助于在章节内提供idref。你得到我的要求..!:) – Antony 2009-08-31 08:54:18

回答

1

由于我不明白为什么你会想在一个任意的字母组合N ID已经独一无二的,我发现一建议,说你这个,而不是去:

<xsl:template match="tocentry"> 
    <p class="Toc-part"> 
    <xsl:apply-templates select="title" /> 
    </p> 
</xsl:template> 

<xsl:template match="title"> 
    <a href="#Sec{count(preceding-sibling::title) + 1}"> 
    <xsl:value-of select="." /> 
    </a> 
</xsl:template> 
1

这个问题将永远得不到解决,因为它是不正确制定。您没有提供严格的生产Ids规则 - 例如,为什么INDX而不是INDE?为什么选择ATA而不选择ATAU?

这个问题有一个优雅的解决方案,由语言的设计者放入XSLT。请阅读generate-id()函数,并使用它来生成您的ID。

0

您可以使用标准字,而不是在ID

的内容。例如,如果它是frontmatter使用 “FMSec1,FMSec2,FMSec3 ..... FMSecN。”

“FM” 将与其他人不同...

相关问题