我正在寻找一种方法,以便在从.xml到.fo转换的xalan生成的章节编号中不包含某些字母。 我正在使用org.apache.xalan.xsltc.trax.TransformerFactoryImpl将.xml文件转换为.fo文件,以便稍后使用它制作PDF。在xml文件中,我有一些编号如下的章节:
<prcitem2 numbering="9">
它们在.fo文件中的转换方式如下: (此代码块位于fo:list-item-label内,但位于fo:list-item内,但是我在移动设备上,无法正确对其进行编辑。抱歉)
<fo:block>Й.</fo:block>
负责转换的xsl是:
<xsl:when test="ancestor-or-self::prcitem2">
<xsl:choose>
<xsl:when test="($language = 'ru')">
<xsl:number count="prcitem2" format="А."/>
</xsl:when>
</xsl:choose>
但是我的俄罗斯同志告诉我,他们的某些字母不能用于编号,这是ATA和俄罗斯标准所不允许的(例如Й,З(不是3)和其他一些字母)。 有没有办法禁止使用这些字母?
答案 0 :(得分:1)
正如我在评论中提到的那样,我看不到“修复”内置xsl:number
算法的方法,建议您用自己的算法替换。
在以下模板中,将alpha
参数的值替换为您要使用的西里尔字母。其他一切都是自我调整。
请注意,输入编号应从零开始,因此请使用参数decimal
为= "$your-number - 1"
的模板进行调用。
<xsl:template name="dec-to-alpha">
<xsl:param name="decimal"/>
<xsl:param name="alpha" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:variable name="base" select="string-length($alpha)"/>
<xsl:variable name="bit" select="$decimal mod $base"/>
<xsl:variable name="char" select="substring($alpha, $bit + 1, 1)"/>
<xsl:variable name="next" select="floor($decimal div $base)"/>
<xsl:if test="$next">
<xsl:call-template name="dec-to-alpha">
<xsl:with-param name="decimal" select="$next - 1"/>
</xsl:call-template>
</xsl:if>
<xsl:value-of select="$char"/>
</xsl:template>