gpt4 book ai didi

java - 限制 xalan 转换生成的编号中使用的字母

转载 作者:行者123 更新时间:2023-12-02 09:42:07 27 4
gpt4 key购买 nike

我正在寻找一种方法,使 xalan 在 .xml 到 .fo 转换中生成的章节编号中不包含某些字母。我正在使用 org.apache.xalan.xsltc.trax.TransformerFactoryImpl 将 .xml 文件转换为 .fo 文件,以便稍后从中生成 PDF。在 xml 文件中,我有一些编号的章节,如下所示:

<prcitem2 numbering="9">

它们在 .fo 中进行了如下转换:(此 block 位于 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)和其他一些字母)。有没有办法禁止使用这些字母?

最佳答案

正如我在评论中提到的,我没有找到“修复”内置 xsl:number 算法的方法,我建议您用自己的算法替换它。

在以下模板中,将 alpha 参数的值替换为您要使用的西里尔字符。其他一切都是 self 调整的。

请注意,输入编号预计从零开始,因此请使用 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>
<小时/>

演示:https://xsltfiddle.liberty-development.net/94rmq74

关于java - 限制 xalan 转换生成的编号中使用的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56987443/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com