XPath 函数能提供更好的翻译功能并能减少编程的工作量

ZDNet软件频道 时间:2001-10-16 作者:Guest Contributor |  我要评论()
本文关键词:XML XSL
在你的XSLT模板里使用XML 的路径语言(XPath)函数能够帮助你减少你在翻译数据的时候所需的编程工作。

在你的XSLT模板里使用XML 的路径语言(XPath)函数能够帮助你减少你在翻译数据的时候所需的编程工作。让我们来看看一些你可以用来收集和操作数据的函数并以此来提高你的XSL翻译过程。

Count(node-set)
你可以用count()函数来确定一个模板中的节点数,这对于处理包含着一个动态数据集的XML数据来说是有用的。它还可以用来从XML数据创建总结数据。假定你希望完成一个显示客户定单上的商品数目的翻译过程。下面是你在完成这个工作的时候可能使用的方法的例子::
<XSL:template match="OrderRecord">
<ItemCount><XSL:value-of select='count(/OrderRecord/Items/LineItem)'/></ItemCount>
</XSL:template>



Not(boolean)

not()函数根据布尔表达式的值返回true或者是false。Not()会返回布尔值的相反值。例如,not(true())返回false而且not(false())返回true。这个函数对于被测试的条件是一个假值而不是真值的逻辑运算是有用的。我们可以用这个函数来改变我们上面的count()例子的行为。在这种情况之下,没有了LineItem,我们不会在结果XML里加上ItemCount 元素:

<XSL:template match="CustomerRecord">
<XSL:if test="not(count(/CustomerRecord/RecordData) = 0)">
<ItemCount><XSL:value-of select='count(/CustomerRecord/RecordData)'/></ItemCount>
</XSL:if>
</XSL:template>



Sum(node-set)

sum()函数基于给出的节点集得到一个总和。这个函数可以用来统计诸如价格,产量,和重量这样的节点值。假设你的翻译过程需要根据一行行的小结数据确定一个定单的总量。下面的例子展示了如何做这个工作::

<XSL:template match="OrderRecord">
<TotalPrice><XSL:value-of select='sum(/OrderRecord/LineItems/Item/Subtotal)'/></TotalPrice>
</XSL:template>



Round(number)
round()函数是用来截断浮点数值将它转换成整数数值。有时因为目标系统的原因或者因为你需要将数值转换成另一个精度,你需要将浮点值转换成整数值,这个函数就能派上用场了(比方说将三位小数的货币值转换成两位小数的货币值)。假设你以便士的一个因子为单位出售商品,但是你的发票系统必须以美元和分币的整数作单位向客户收钱。在这种情况下,你需要截断这些小数值以便将它们发送到收款系统。为了不损失任何便士,我们先统计价钱然后在最后一步将它们截成整数。下面的代码演示了这个过程::
<XSL:template match="OrderRecord">
<TotalPrice><XSL:value-of select='round(sum(/OrderRecord/LineItems/Item/Subtotal) * 100) div
100'/></TotalPrice>
</XSL:template>



总结

在本文中,我们学习了四个可以用于XSLT 模板的函数。XPath 函数提供了一个很好的创建复杂转换的功能集。当一个系统接收XML数据的时候这些函数能够减少需要的编程工作量。


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134