XML数据岛技术是IE浏览器(5.0以上版本)用于绑定和显示XML数据的一种特定方法,它首先将XML文档直接包含于HTML元素或者链接XML文件到HTML元素,然后使表格等HTML元素绑定XML文档元素,从而实现XML数据在HTML页面中的显示。
当IE浏览器打开包含XML数据岛的HTML页面时,其内置的XML解析器读取并分析XML文档;同时创建一个名为数据源对象(DSO)的ActiveX编程对象,它可以存储或缓存XML数据并提供对这些数据的访问。DSO把XML数据当作记录集(recordset)存储,即记录及其域的集合:XML文档根元素包含一系列类型相同的记录元素,每一个记录元素包含嵌套的记录或相同的域元素集,每个域元素只包含字符数据。因而HTML元素的数据绑定也就只能与对称结构的XML文档一起使用。当XML文档包含很多记录时,可以使用分页功能一次显示一组记录。
下面是一个展示XML数据岛以及遍历此XMLDOM树的实例:
<
html
>
<
head
>
<
title
>
数据岛
</
title
>
<
script
language
="javascript"
for
="window"
event
="onload"
>
<!--
varstr="遍历数据岛XML文档:<br/>非属性节点类型(数字代码),节点名称:节点值[属性节点名值对(数据类型)]<br/>";
vardoc=myxml.XMLDocument;
if(doc.firstChild!=null)
{
c1=doc.firstChild;
varl=0;
traverse(c1,l);
}
mydiv.innerHTML+=str;
//IE解析的时候把version="1.0"encoding="UTF-8"既作为XML声明的xml节点名的值,也作为XML声明节点的属性!
functiontraverse(node,level)
{
while(node!=null)
{
varln=level;
for(k=0;k<ln;k++)str+=" ";
str+=node.nodeTypeString+"("+node.nodeType+"), "+node.nodeName+": "+node.nodeValue;
if(node.attributes!=null)
{
//IE解析的attributes有问题,已设置node.attributes!=null判断,但仍执行下面注释的两句!
//str+=" attribute(2) {";
for(vari=0;i<node.attributes.length;i++)
{
attr=node.attributes(i);
str+=" ["+attr.nodeName+"=""+attr.nodeValue+""]";
}
//str+="}";
}
str+="<br/>";
if(node.childNodes!=null)//node.hasChildNodes()
{
ln++;
cn=node.childNodes(0);
traverse(cn,ln);
}
node=node.nextSibling;
}
}
//-->
</
script
></
head
>
<
body
>
<
xml
id
="myxml"
>
<?
xmlversion="1.0"encoding="UTF-8"
?>
<
orders
>
<
order
>
<
customerid
limit
="1000"
>
12341
</
customerid
>
<
status
>
pending
</
status
>
<
item
instock
="Y"
itemid
="SA15"
>
<
name
>
SilverShowSaddle,16inch
<
tag
>
sss
</
tag
>
</
name
>
<
price
>
825.00
</
price
>
<
qty
>
1
</
qty
>
</
item
>
<
item
instock
="N"
itemid
="C49"
>
<
name
>
<
content
>
PremiumCinch
</
content
>
<
tag
>
pc
</
tag
>
</
name
>
<
price
>
49.00
</
price
>
<
qty
>
1
</
qty
>
</
item
>
</
order
>
<
order
>
<
customerid
limit
="150"
>
251222
</
customerid
>
<
status
>
pending
</
status
>
<
item
instock
="Y"
itemid
="WB78"
>
<
name
>
<
content
>
WinterBlanket(78inch)
</
content
>
<
tag
>
wb
</
tag
>
</
name
>
<
price
>
20
</
price
>
<
qty
>
10
</
qty
>