XSL <xsl:number>返回异常值,如何为指定XML元素生成连续字母编号?
解决TEI元素连续字母编号异常问题
问题出在<xsl:number>的count属性设置上:你用了count=".",这会统计所有节点(包括文本节点、空白节点、属性节点等),而非仅目标的tei:sic、tei:del、tei:surplus元素,导致编号跳过大量非目标节点,出现h、n、t这类跳号结果。
修正方案
修改count属性,明确指定只统计这三类TEI元素,确保计数连续:
<xsl:template match="tei:sic | tei:del | tei:surplus"> <xsl:copy> <xsl:attribute name="n"> <!-- 仅计数目标TEI元素,生成连续字母序列 --> <xsl:number count="tei:sic | tei:del | tei:surplus" format="a" level="any"/> </xsl:attribute> <xsl:apply-templates select="@* | node()"/> </xsl:copy> </xsl:template>
参数说明
count="tei:sic | tei:del | tei:surplus":限定计数范围仅为这三个目标元素,排除其他无关节点干扰format="a":指定输出小写字母编号(a、b、c……z、aa、ab……)level="any":遍历整个文档树进行计数,不受元素嵌套层级影响。如果需要在特定父元素范围内计数,可改为level="single"(当前父元素下)或level="multiple"(多层级)
内容的提问来源于stack exchange,提问作者jbrehr
相关产品推荐
相关产品推荐

