XSLT 数字到字符串转换





5.00/5 (2投票s)
一个用于数字位值字符串表示的 XSLT 转换
引言
我们都见过许多用不同语言编写的应用程序,用于将数字数据转换为其等效的位值表示形式。 例如:123 表示为“一百二十三”。 我正在学习 XSLT,并编写了这个应用程序来执行从 XML 到 HTML 的数字到位值转换。 这个转换文件使用了 XSLT 的许多特性,例如用于字符串操作、格式化和数字转换的内置方法。
背景
不熟悉印度传统编号系统的人可能会觉得这很有挑战性。 印度、巴基斯坦和孟加拉国使用的系统基于两位小数的独特分组,而不是西方常见的三位小数。 在印度的商业交易中,人们很可能会遇到阿拉伯、克罗尔和拉克这些数字术语(见下表),尽管列出的更高的数字很少使用。 这些更常用的词经常组合使用,例如,一个拉克克罗尔,即 1012,或一万亿。 Padma 和 Kharab 这两个术语有时在印地语中使用。
印度独特的数字系统
术语 数字 | 零的个数 | 西方系统(短标度) |
拉克 (lac) 1,00,000 | 5 | 100000(10 万) |
克罗尔 1,00,00,000 | 7 | 10,000,000(一千万) |
阿拉伯 1,00,00,00,000 | 9 | 1,000,000,000(十亿) |
卡拉布 1,00,00,00,00,000 | 11 | 100,000,000,000(1000 亿) |
尼尔 1,00,00,00,00,00,000 | 13 | 10,000,000,000,000(10 万亿) |
帕德玛 1,00,00,00,00,00,00,000 | 15 | 1,000,000,000,000,000(一千兆) |
尚克 1,00,00,00,00,00,00,00,000 | 17 | 100,000,000,000,000,000(100 千兆) |
玛哈-尚克 1,00,00,00,00,00,00,00,00,000 | 19 | 10,000,000,000,000,000,000(10 秭) |
Using the Code
按照下面指定的格式制作你的 XML 文档。 将样式表引用添加到你的 XML,然后在网络浏览器中打开该 XML(在此 XML 中,# 代表一个数字)
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="TransformNumber.xslt" ?>
<numbers>
<number>#########</number>
<number>####</number>
<number>####</number>
<number>#</number>
<number>###########</number>
<number>#####</number>
</numbers>
转换算法
(1234 -> 10234)
(10234->010234)
value:01 place:3 evaluates to 'One Thousand'
value:02 place:2 evaluates to 'Two Hundred'
value:34 place:1 evaluates to 'Thirty Four'
导致结果string
:'One Thousand Two Hundred Thirty Four
'。
- 读取 XML 中的每个数字,并检查它是否包含百位数值。 如果是,则在
string
中从右侧位置的第四个位置插入一个“0
”字符。(此步骤处理异常,因为在印度位值数字系统中,只有百位数值被评估为个位数;其余位置具有成对的值。) - 检查步骤 1 之后,
string
是否包含奇数个字符。 如果是,则在string
前加上一个“0
”字符。(此步骤确保string
包含偶数个字符;因此,string
稍后将被拆分为数字对,并转换为其string
等效项。) - 对于每一对,使用该对值及其在
string
中的位置调用转换器。 位置由string
的长度除以2
确定。
翻译器算法
每一对包含两个数字。
(34 -> 3 + '0' -> 30 -> Thirty)
(34 -> 4 -> Four)
(3 -> 3-1 -> 2 -> Thousand)
- 分离第一个数字,并在其后附加一个“
0
”字符。 将其翻译成等效的string
表示形式。 如果值为零,则不执行任何操作。 - 取第二个数字并放入其对应的字符串表示形式。 如果值为零,则不执行任何操作。
- 取位值并将其翻译为表示此
string
对在整个数字中的实际位置。 如果位置为零,则不执行任何操作。
关注点
此项目中的 XSLT 文件可以帮助你理解调用递归模板,还可以让你了解如何使用内置函数。 我们可以以此为基础,并为英语数字系统翻译设计我们自己的 XSLT。