计算复杂的派生属性
虽然未在本教程中演示,但事实上经常需要计算派生属性,而不仅仅是将静态字符串与从 JET 输入模型中抽取的值并置。此类处理经常可以通过在 XPath 表达式内调用 XPath 函数来完成。
假定所生成电子邮件消息用来向用户通知已将其电子邮件地址用作标识为其创建帐户,并告知所生成密码。所生成密码是名的首字母加上其姓,并且整个密码都使用小写字母。所生成电子邮件消息应该包含此密码作为对用户的提示。
JET XPath 引擎提供了几个有助于完成此任务的函数。substring 函数返回字符串的一部分,concat 函数将两个或更多字符串并置,而 lowercase 函数则管理大小写转换。以下代码片段显示对邮件元素密码的假设派生属性的计算:
{lower-case(concat(substring($mailing/@firstName,1,1), $mailing/@lastName))}JET 包括大部分在 XPath 1.0 规范核心函数库中定义的 XPath 1.0 函数。仅下列两个函数未实现:lang 和 id。JET 还提供其他几个 XPath 函数。
过滤 XPath 路径表达式
在某些情况下,应该使用 XPath 谓词以根据特定条件处理部分元素。谓词是应用于 XPath 表达式中步骤的表达式,它过滤与该步骤匹配的元素。谓词可以是布尔表达式或整型表达式,在此情况下,它被视为元素集的、从 1 开始编号的索引。谓词以方括号([])包围。
下列示例使此概念更为具体。下面的标记 <c:iterate> 仅对包含感兴趣的元素的邮件元素进行处理:
<c:iterate select="$campaign/mailing[interest]" var="mailing">XPath 通过测试所匹配节点集的基数来将感兴趣的谓词表达式的结果转换为布尔值。该表达式等价于下面的示例:
<c:iterate select="$campaign/mailing[count(interest) > 0]" var="mailing">下面的标记 <c:iterate> 对邮件元素进行处理,这些元素将 Product1 指定为用户感兴趣的第一个产品:
<c:iterate select="$campaign/mailing[interest[1]/@code = 'Product1']" var="mailing">