您的位置:首页 > 其它

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

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

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

源文档和模板文档

student.src.xml

<?xml version="1.0" encoding="utf-8"?>
<students>
<student sn="001">
<name>张三</name>
<age>19</age>
</student>
<student sn="002">
<name>李四</name>
<age>20</age>
</student>
<student sn="003">
<name>王五</name>
<age>18</age>
</student>
</students>


student.tpl.xml

<?xml version="1.0" encoding="utf-8"?>
<template rootname="table">
<attribute name="border" value="1" />
<element name="tr">
<attribute name="bgcolor" value="#6699FF" />
<element name="td">
<text>学号</text>
</element>
<element name="td">
<text>姓名</text>
</element>
<element name="td">
<text>年龄</text>
</element>
</element>
<foreach base="/student">
<element name="tr">
<element name="td">
<text path="." attr="sn" />
</element>
<element name="td">
<text path="./name" />
</element>
<element name="td">
<text path="./age" />
</element>
</element>
</foreach>
</template>


转换代码

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


转换结果



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

代码运行试验,下载上一篇日志里的压缩包,解压,在test001.hta文件的同级目录下建立xmltest文件夹,将源文档存为student.src.xml,目标文档存为student.tpl.xml,然后拷贝转换代码到test001.hta中,运行,就可以看到转换结果了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: