【发布时间】:2023-03-22 21:41:01
【问题描述】:
我想为每个主题标题生成编号。
有1个Ditamap,结构如下
<map>
<chapter>
<topicref href="ditafile1#topic1">
<topicref href="ditafile1#topic2">
<topicref href="ditafile1#topic3">
and so forth
</chapter>
<chapter>
<topicref href="ditafile2#topic2-1>
<topicref href="ditafile2#topic2-2>
and so forth
</chapter>
</map>
2个相同结构的Dita文件
Dita 文件 1:
<topic>
<topic>
<title>Introduction</title>
</topic>
<topic id="topic1>
<title>Number 1</title>
</topic>
<topic id="topic2>
<title>Number 2</title>
</topic>
</topic>
Dita 文件 2
<topic>
<topic id="topic2-1">
<title>Number 2-1</title>
</topic>
<topic>
<title></title>
</topic>
<topic id="topic2-2">
<title>Number 2-2</title>
</topic>
</topic>
预期结果:
1.1 Number 1
// 1.1 根据匹配的id和href生成1.2 Number 2
// 1.2 根据匹配的id和href生成2.1 数字 2-1
2.2 数字 2-2
如您所见,订单不是结构化的。我需要调用ditamap,基于ditamap结构,比较dita主题id和ditamap href#,如果匹配数字标题。
下面是我的代码
在(主题/主题/标题)
<xsl:template match="topic/topic/title">
<xsl:for-each select="map">
<xsl:number count="chapter" format="1. "/>
<xsl:for-each select="document(@href)/chapter/topicref">
<xsl:number count="chapter|topicref" level="multiple" format="1.1. "></xsl:number>
// if dita map href matches topic id {
<h2>
<xsl:value-of select="."/> <xsl:value-of select="text()"/>
</h2>
}
</xsl:for-each>
</xsl:for-each>
</xsl:template>
谢谢。
【问题讨论】:
-
如果您能显示一个更完整的输入文件示例将会很有帮助 - 您的
<xsl:for-each select="bookmap">行有点令人困惑,因为您的示例中的任何地方都没有任何<bookmap>元素已经给出了,更不用说作为topic/topic/title结构的子元素的<bookmap>元素了。如果您可以提供一个 XML 格式的预期输出示例以及您的代码生成的任何实际输出示例,这也会很有帮助。 -
嗨,谢谢。 ditamap 的结构保持不变,只是命名我放错了。是的,
-
您在使用 DITA-OT 吗?
-
我正在用 xslt 写作。
标签: xslt