Как создать идентификатор из последовательности первых букв содержимого в xslt? - PullRequest
0 голосов
/ 31 августа 2009

Мне нужно сгенерировать идентификатор последовательности для части оглавления и идентификатор для ссылочных мест, используя первые три буквы содержимого.

Введите:

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

Помогите, пожалуйста, сгенерировать идентификатор из содержимого первых букв ...

С уважением, Antony

Ответы [ 3 ]

1 голос
/ 31 августа 2009

Эта проблема никогда не будет решена, потому что она не сформулирована правильно . Вы не представляете строгие правила для создания идентификаторов - например, почему INDX, а не INDE? Почему АТА, а не АТАУ?

Эта проблема имеет элегантное решение , добавленное в XSLT разработчиками языка. Прочтите о функции generate-id() и используйте ее для генерации идентификаторов.

1 голос
/ 31 августа 2009

Поскольку я не понимаю, почему вы захотите использовать произвольную комбинацию букв в идентификаторе, который уже является уникальным, я не рекомендую это и говорю, что вместо этого вы должны:

<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>
0 голосов
/ 01 сентября 2009

Вы можете использовать стандартное слово вместо содержимого в идентификаторе

например, если это frontmatter, используйте "FMSec1, FMSec2, FMSec3 ..... FMSecN .."

"FM" будет отличаться от других ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...