代码之家  ›  专栏  ›  技术社区  ›  jbrehr

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

  •  0
  • jbrehr  · 技术社区  · 6 年前

    在XSLT2.0中,我将tei:xml文档处理为HTML。在这个过程中,我两次输出脚注数字,原因有二。

    <sup> (上标数字)。

    第二,在页脚 div

    所有这些都很好,很大程度上要感谢他们的帮助 here

    但是在测试数百个文档的过程中,我注意到了一个数字顺序的问题。

    正确的顺序 (第9-45行)。第二步输出 错误的顺序 (第73-99行)。XSLT fiddle在HTML视图中简单明了地演示了这一点: https://xsltfiddle.liberty-development.net/jyH9rNj

    简单比较一下,输出如下

    body footnote #        footnote div footnote #
         1                          3
         2                          1
         3                          2
    

    我认为这是一个订单处理的问题,但在试图通过 modes priority seg 元素,然后再给它一个数字。。。

    非常非常感谢。

    注:电话号码 seg/@corresp date 每次只能出现一次 <seg> 最大值; note 理论上可以出现几次。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Martin Honnen    6 年前

    我想你应该把变量改成

    <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)
    

    很明显“这是福”的解释 seg/@corresp 现在是有点误导,因为这是一个真正的 fn标记