如何解决使用 map2epubHtmlTocImpl.xsl 在 nav.xhtml (epub) 中重新排序 TOC 输出
我正在尝试根据以下条件重新排序 nav.xhtml (epub) 中主题的输出:
如果主题 A(可能超过 1 个主题 A)在数据映射中位于主题 B 之前,则将主题 A 的 <li>
放在主题 B 的 <li>
之后,以便导航现在看起来像这样
<li>topic xx</li>
<li>topic xx</li>
<li>topic xx</li>...
<li>topic B</li>
<li>topic A</li>
<li>topic A</li>
我设法抑制了 <li>topic A</li>
的第一个输出(即自然顺序)。然后,我输出 <li>topic B</li>
。
我在 <li>topic A</li>
之后立即创建了 <li>topic B</li>
(使用 xsl:for-each topicA)。我正在手动构建,但它不太工作。我已经使用 preceding-sibling::*[@outputclass='topic A']/@id
重新插入主题 A 中的 id(或 $linkId)值,但它不起作用。
我确实设法使用以下方法插入了前面主题 A 的主题标题:
<xsl:apply-templates select="preceding-sibling::*[@outputclass='topic A']" mode="nav-point-title"/>
但这只会输出第二个 li 中的第一个标题,因此它看起来像这样:
<li class="tocrm" id=""><a href="XX"></a></li>
<li class="tocrm" id=""><a href="XX">Topic A1</a></li>
[请注意,我还没有添加包含 href 的代码。这是列表中的下一个!]
如果我可以重用 $linkId 等变量就好了,但它们似乎不想在主题 B 的上下文中工作。 我知道我可能不会得到这个问题的答案,因为它太复杂了,但我已经尝试了数百次迭代,但我不知所措。 任何建议将不胜感激。 真挚地, 苦苦挣扎的 d4p 用户
解决方法
也许您可以更改处理顺序,例如https://github.com/dita4publishers/org.dita4publishers.epub/blob/develop/xsl/map2epubHtmlTocImpl.xsl#L40 使用
//Method to create database in slite
public void createDatabase(){
SQLiteDatabase myDB = this.openOrCreateDatabase("Dosage",MODE_PRIVATE,null);
}
//Method to create table
代替
<xsl:variable name="b-topics" select="*[df:class(.,'map/topicref')][@title = 'topic B']"/>
<xsl:variable name="a-topics" select="$b-topics/preceding-sibling::*[df:class(.,'map/topicref')][@title = 'topic A']"/>
<xsl:variable name="others" select="$b-topics/preceding-sibling::*[df:class(.,'map/topicref')][@title != 'topic A']"/>
<xsl:apply-templates select="$others,$b-topics,$a-topics,$b-topics/following-sibling::*[df:class(.,'map/topicref')]" mode="#current">
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。