1

XML ドキュメントをオンライン表示用の HTML ファイルに変換しています (電子ブックとして)。

XML ファイルの各章は に含まれて<div>おり、見出し ( <head>) があります。各見出しを 2 回表示する必要があります。1 回目は最初の目次の一部として、2 回目は各章の冒頭に表示します。私はこれを行うためmode="toc"に内で使用し<xsl:template>ました。

私の問題は、いくつかの<head>見出しに子要素<note>があり、編集脚注が含まれていることです。見出しが章の上部に表示されるときにこれらの<note>タグを処理する必要がありますが、目次には表示したくありません (つまり、mode="toc".

私の質問は<head>、目次の要素を処理するようにスタイルシートに指示する方法ですが、子要素を無視する方法です (発生する必要があります)。

以下は、メモのない見出しの例で、目次モードで問題なく表示されます。

<div xml:id="d1.c1" type="chapter">
  <head>Pursuit of pleasure. Limits set to it by Virtue—
  Asceticism is Vice</head>
  <p>Contents of chapter 1 go here</p>
</div>

そして、これはメモ付きのものです。これは、目次を生成するときに削除したいものです。

<div xml:id="d1.c6" type="chapter">
  <head>Happiness and Virtue, how diminished by Asceticism in an indirect
  way.—Useful and genuine obligations elbowed out by spurious ones<note
  xml:id="d1.c6fn1" type="editor">In the text, the author has noted at this 
  point: 'These topics must have been handled elsewhere: perhaps gone through 
  with. Yet what follows may serve for an Introduction.'</note></head>
  <p>Contents of chapter 6 go here</p>
</div>

現在、私の XSL は次のようになっています。

<xsl:template match="tei:head" mode="toc">
    <xsl:if test="../@type = 'chapter'">
        <h3><a href="#{../@xml:id}"><xsl:apply-templates/></a></h3>
    </xsl:if>
</xsl:template>

tocメモ用モードで新しい空白のテンプレート マッチを追加しようとしましたが、役に立ちませんでした。例えば:

<xsl:template match="tei:note" mode="toc"/>

私も試しtei:head/tei:noteてみました\\tei:head\tei:note

ドキュメント全体 ( /) に一致する私のテンプレートでは、次を使用して目次を表示します。

<xsl:apply-templates select="//tei:head" mode="toc"/>

以下を追加しようとしましたが、役に立ちませんでした:

<xsl:apply-templates select="//tei:head/tei:note[@type = 'editorial']"
mode="toc"/>

どんな助けでも大歓迎です!

ps これは SE に関する初めての投稿です。重要な詳細を見逃していた場合はお知らせください。明確にします。ありがとう。

4

1 に答える 1

0

toc 固有の処理を行う場合、通常はモードを渡す必要があります。

<xsl:template match="tei:head" mode="toc" />
<xsl:template match="tei:head[../@type = 'chapter']" mode="toc">
  <h3><a href="#{../@xml:id}"><xsl:apply-templates mode="toc" /></a></h3>
</xsl:template>

modeの属性に注意してくださいxsl:apply-templates。それを行う場合は、テンプレートtei:noteに従う必要があります。

ID テンプレートを使用している場合、これはおそらく、tocモード用に 1 つ必要になることを意味します。

別の方法として、 に到達した後にモード固有の処理が本当に必要ない場合はtei:head、次のようにすることができます。

<xsl:template match="tei:head" mode="toc" />
<xsl:template match="tei:head[../@type = 'chapter']" mode="toc">
  <h3><a href="#{../@xml:id}">
    <xsl:apply-templates select="node()[not(self::tei:note)]" />
  </a></h3>
</xsl:template>
于 2013-04-25T15:38:32.623 に答える