在不同格式的XML文档之间相互转换(一)基本转换

      本文将试着讨论不同格式XML文档之间相互转换的主题,比如怎样把格式化的纯数据转换成HTML文档,VML文档,或其他格式的XML文档,进一步,如何按每个具体的要求从源数据(元素/文本/属性)动态计算出目标数据(元素/文本/属性),再进一步,如何为生成的目标数据搭载特定的js代码,更进一步,如何使目标数据成为它的容器元素乃至父页面的  一部分,并实现动态交互。最后,如何做好垃圾清理工作,尤其对于数据更新频繁的容器,能否及时清除过期的文档结构和对象引用,同时又不影响新装入新内容和生成新对象。

      一个XML文档转换工具至少应该具备两部分功能,模板和寻址。模板用来用来定义目标文档的结构,寻址功能负责在源文档中按指定路径返回数据,将寻址结果插入模板的特定位置,然后解析模板,生成目标文档,这个过程可以实现数据的静态转换。如下面代码。

源文档和模板文档

 student.src.xml
1 <?xml version="1.0" encoding="utf-8"?>
2  <students>
3 <student sn="001">
4 <name>张三</name>
5 <age>19</age>
6 </student>
7 <student sn="002">
8 <name>李四</name>
9 <age>20</age>
10 </student>
11 <student sn="003">
12 <name>王五</name>
13 <age>18</age>
14 </student>
15 </students>

 

   student.tpl.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <template rootname="table">
3 <attribute name="border" value="1" />
4 <element name="tr">
5 <attribute name="bgcolor" value="#6699FF" />
6 <element name="td">
7 <text>学号</text>
8 </element>
9 <element name="td">
10 <text>姓名</text>
11 </element>
12 <element name="td">
13 <text>年龄</text>
14 </element>
15 </element>
16 <foreach base="/student">
17 <element name="tr">
18 <element name="td">
19 <text path="." attr="sn" />
20 </element>
21 <element name="td">
22 <text path="./name" />
23 </element>
24 <element name="td">
25 <text path="./age" />
26 </element>
27 </element>
28 </foreach>
29 </template>

 

 

 转换代码

1 var srcdoc = $System.XML.XMLUtil.loadXMLFile("xmltest\\student.src.xml");
2  var tpldoc = $System.XML.XMLUtil.loadXMLFile("xmltest\\student.tpl.xml");
3  var tdoc = $System.XML.XMLUtil.XDOC.transformDoc(srcdoc , tpldoc);
4 $("div005").innerHTML = tdoc.xml;

 

 

 转换结果

 

模板文档中中attribute元素用来生成目标文档中特定元素的属性,foreach元素负责遍历源文档中特定元素的集合。

代码运行试验,下载上一篇日志里的压缩包,解压,在test001.hta文件的同级目录下建立xmltest文件夹,将源文档存为student.src.xml,目标文档存为student.tpl.xml,然后拷贝转换代码到test001.hta中,运行,就可以看到转换结果了。

posted @ 2010-11-17 22:31  lonely~  阅读(2622)  评论(2编辑  收藏  举报