XSLT 2.0-xsl:数字编号顺序不一致

时间:2018-11-04 22:20:11

标签: xslt xslt-2.0 tei

在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

我认为这是订单处理的问题,但是尝试通过modespriority进行调整后,我无法解决此问题。似乎与移动seg元素有关,然后为其赋予了数字...

非常感谢。

NB:seg/@correspdate的数字最多只能每个<seg>出现一次; note在理论上可以出现几次。

1 个答案:

答案 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