完成第一步后,我开始着重下一步操作,将列名与对应的值联系起来。由于XSL中的变量不会发生变化,所以有必要建立一个新变量来保存相关联的列名和列值。另外,因为缺乏数组,所以还要建立一个变量,它的内部结构使恢复必要的信息相对容易。最终我设计出下面这些代码:
key1=item1,key2=item2,key3=item3
对!在这个时候,问题出现转机;我意识到,经过一个小时的工作后,我得到一个集合或联合数组(如果你更喜欢这个名称的话)。一旦前面出现曙光,问题变得更加容易。如列表B所示,其中的模板建立上述结构。
列表B
由于现在信息是一个集合,而非一团糟,所以我们指望出现某种功能。但不幸的是,考虑这些期待时,不得不衡量XSL的局限与优势。表1中列出的为执行XSL集合而编写的单个指定模板的功能,列表C和列表D分别为最终式样表和一个测试XML文件。
表1:功能
模板 |
说明 |
collection |
用两个字符串建立一个“集合”或“联合数组”,密钥和项目用逗号隔开。 |
item |
返回与密钥相关的项目。 |
keys |
返回集合密钥列表,密钥间用逗号隔开。 |
collectionAttributes |
在输出文件中为所有集合密钥/项目对建立属性。属性名为密钥,项目为值。 |
collectionElements |
在输出文件中为所有集合密钥/项目对建立元素。元素名为密钥,项目为内容。 |
列表C
列表D
将上面的XSL样式表应用于XML文件中,把含有SQL插入语句的列转变成某种有用的东西就变得相对容易一些。列表E中显示的输出XML文件在随后的转换中也更容易处理。
列表E:输出的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<result>
<insert>
<column1>11</column1>
<column2>22</column2>
<column3>33</column3>
</insert>
<insert>
<column1>44</column1>
<column2>55</column2>
<column3>66</column3>
</insert>
</result>
有趣的解决方案
由于某种原因,一得到和上面类似的任务,我最先想到的是,“我的简历是最新的吗?”幸运的是,这种绝对的恐慌只持续大约两分钟左右,给为麻烦问题寻找有趣的解决方案留下大量时间。只要稍稍作一下修改,这些模板就可用来对SQL更新语句执行同样的功能。简言之,更多有趣的材料!
责任编辑:张琎
查看本文的国际来源
|