2009-08-31 61 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」 將與其他人不同...

相關問題