我需要使用内容前三个字母为引用的位置生成TOC部件的序列ID和idref。
输入:
<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 :(得分:1)
由于我不明白为什么你会想要一个已经 唯一的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 :(得分:1)
这个问题永远无法解决,因为它没有正确制定。您没有提出生成ID的严格规则 - 例如,为什么INDX而不是INDE?为什么选择ATA而不是ATAU?
这个问题有一个优雅的解决方案,由该语言的设计者提供给XSLT。请阅读generate-id()
函数并使用它来生成ID。
答案 2 :(得分:0)
您可以使用标准字而不是ID
中的内容例如,如果它是frontmatter使用“FMSec1,FMSec2,FMSec3 ..... FMSecN ..”
“FM”将与其他人不同......