2009-08-31 7 views
0

J'ai besoin de générer un identifiant de séquence pour la partie TOC et idref pour les endroits référencés en utilisant les trois premières lettres du contenu.Comment générer un ID à partir des séquences de première lettre de contenu dans xslt?

Entrée:

<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> 

Résultat requis:

<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> 

S'il vous plaît aidez-moi à générer ID à partir du contenu premières lettres ...

Cordialement, Antony

+0

Pourquoi voulez-vous une combinaison de lettres potentiellement ambiguë * et * un compteur non ambigu dans le même ID. De ce que je peux voir, appeler les sections "Sec1..SecN" est suffisant, alors que les appeler "LOBRSec1" ne vous achète rien tout en causant beaucoup de travail supplémentaire. – Tomalak

+0

Ces parties sont des titres de parties, j'ai déjà donné "sect1 à secN .." pour les titres de chapitres et de sections .. donc les titres de frontmatter doivent être séquencés par leur nom en première lettre, ceci aidera à donner idref dans le chapitre. vous obtenez mon exigence ..! :) – Antony

Répondre

1

Puisque je ne vois pas pourquoi vous voudriez une combinaison de lettres arbitraires dans un n ID déjà est unique, je dis-recommander et dire que vous allez avec ceci:

<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

Ce problème ne sera jamais résolu, car il n'est pas formulé correctement. Vous ne présentez pas de règles strictes pour la production des ID - par exemple, pourquoi INDX mais pas INDE? Pourquoi ATA et pas ATAU?

Ce problème a une solution ellegant, mis en XSLT par les concepteurs de la langue. Lisez à propos de la fonction generate-id() et utilisez-la pour générer vos identifiants.

0

Vous pouvez utiliser Word standard au lieu du contenu de l'id

par exemple s'il est utilisé frontmatter "FMSec1, FMSec2, FMSec3 ..... FMSecN .."

"FM" sera être la différence que d'autres ...

Questions connexes