我正在将XML文档转换为HTML文件以供在线显示(作为电子书)。
XML文件中的每一章都包含在<div>
中,并且标题为<head>
。我需要两次显示每个标题 - 一次作为开始时的目录的一部分,第二次在每章的顶部。我在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"/>
任何帮助将不胜感激!
P.S。这是我在SE上的第一篇文章,所以如果我错过了重要的细节,请告诉我,我会澄清。感谢。
答案 0 :(得分: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
的模板。
如果您使用的是身份模板,这可能意味着您需要toc
模式。
或者,如果您在到达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>