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数据岛以及遍历此XML
<
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
>
< head >
< title > 数据岛 </ title >
< script
<!--
var
c1
traverse(c1,l);
}
mydiv.innerHTML+=str;
function
str
str+="<br/>";
node=node.nextSibling;
}
}
//-->
</ script ></ head >
< body >
< xml
<? xml