在XSLT 2.0中,我正在将tei:xml文档处理为HTML。在此过程中,出于两个原因,我分两步输出了脚注编号。
首先,通过选择<sup>
附加/替换的某些元素在文本主体中添加数字(对于上标数字)。
第二,在页脚div
中,创建具有相同注释的那些相同脚注编号的列表。
所有这些都很好用,这在很大程度上要归功于here在SO方面的帮助。
但是在测试数百个文档的过程中,我注意到了数字顺序的问题。
第一步以正确的顺序输出数字(第9-45行)。第二步以错误的顺序输出元素(第73-99行)。 XSLT小提琴在HTML视图中简单,清晰地演示了这一点:https://xsltfiddle.liberty-development.net/jyH9rNj
进行简单比较,输出如下所示
body footnote # footnote div footnote #
1 3
2 1
3 2
我认为这是订单处理的问题,但是尝试通过modes
和priority
进行调整后,我无法解决此问题。似乎与移动seg
元素有关,然后为其赋予了数字...
非常感谢。
NB:seg/@corresp
和date
的数字最多只能每个<seg>
出现一次; note
在理论上可以出现几次。
答案 0 :(得分:2)
我认为您要将变量更正为
<xsl:variable name="footnote-sources" select="$fn-markers-added//tei:date[@type='deposition_date'] |
$fn-markers-added//tei:note[@type='public'] | $fn-markers-added//tei:fn-marker"/>
因为您不再希望对seg
进行编号,而是希望在过渡步骤中将它们转换为fn-marker
。
然后,您还需要将模板调整为
<!-- outputs each item to a <p> in footnote <div> -->
<xsl:template match="*[. intersect $footnote-sources]" mode="build_footnotes">
<xsl:choose>
<xsl:when test="self::tei:date[@type='deposition_date']">
<xsl:element name="p">
<sup>
<xsl:number count="*[. intersect $footnote-sources]" format="1" level="any"/>
</sup> this is the foo /date (that should be footnote #1)
</xsl:element>
</xsl:when>
<xsl:when test="self::tei:fn-marker">
<xsl:element name="p">
<sup>
<xsl:number count="*[. intersect $footnote-sources]" format="1" level="any"/>
</sup> this is the foo seg/@corresp (that should be footnote #3)
</xsl:element>
</xsl:when>
<xsl:when test="self::tei:note[@type='public']">
<xsl:element name="p">
<sup>
<xsl:number count="*[. intersect $footnote-sources]" format="1" level="any"/>
</sup> this is the foo /note (that should be number footnote #2)
</xsl:element>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
https://xsltfiddle.liberty-development.net/jyH9rNj/1的显示方式
1 this is the foo /date (that should be footnote #1)
2 this is the foo /note (that should be number footnote #2)
3 this is the foo seg/@corresp (that should be footnote #3)
显然,“这是foo seg/@corresp
现在的解释有点误导,因为它实际上是在转换步骤之前放置的fn-marker
。