xml数据源对象DSO是一个微软ActiveX控件,构建在微软IE4以后的版本上。这个对象允许你把一个外部的xml文件或者嵌入HTML文件中的内容提取到HTML页面中。
你可以在一个web页面中使用xml - DSO从一个外部xml文件中选取内容,从嵌入web页面的xml中提取xml数据,然后使用JavaScript操作这些数据。然而,并不建议在Internet中使用这个对象,因为DSO只能工作在MSIE 4以上的浏览器中,因此这可能会带来一些兼容性问题。 所以,在企业内部网使用xml-DSO是很合适的。
开始
为了初始化xml - DSO对象,我们使用<OBJECT>标记。 用于xml-DSO的CLASSID是:
CLSID:550dda30-0541-11d2-9ca9-0060b0ec3d39
这ID唯一标识xml-DSO。使用下面的代码在一个web页面中初始化这个控件:
<OBJECT ID="SomeID" CLASSID="CLSID:550dda30-0541-11d2-9ca9-0060b0ec3d39"></OBJECT>
虽然大部分对象需要许多参数与之相关联,但是xml-DSO不需要任何参数。
使用一个xml数据岛析取数据
首先,通过使用<xml>标记包含一个xml数据岛。其次,给它分配一个ID,xmldb --以备以后使用。 数据实际上是使用HTML标记:<ALT>,<SPAN>,<DIV>等等提取的。代码列表1中的代码使用了<SPAN>标记。datasrc属性指定了你想从中提取数据的那个数据岛。datafld属性指定了你想要的数据的xml标记。所以,第一个<SPAN>提取名称,而第二<SPAN>提取性别。
代码列表1:
<!-- example1.htm -->
<html>
<head>
<title>xml DSO-example1.htm</title>
</head>
<body bgcolor="#FFFFFF">
<xml id="xmldb">
<db>
<member>
<name>Premshree Pillai<name>
<sex>male</sex>
</member>
<member>
<name>Vinod</name>
<sex>male</sex>
</member>
</db>
</xml>
<span datasrc="#xmldb" datafld="name"<</span>
<br>
<span datasrc="#xmldb" datafld="sex"></span>
</body>
</html>
注意这段代码没有初始化一个xml-DSO对象。这是因为xml数据岛的使用中已经隐式地创建了一个。输出应为:
Premshree Pillai
male
注意在xml数据岛中有两个<name>和<sex>标记。使用这个方法,你只能提取这些标记中的第一个实例。代码列表2中的代码使用<TABLE>标记提取所有的实例:
输出将是:
Name Sex
Premshree Pillai male
Vinod male
在代码列表2中,<TABLE>标记使用<TD>标记内的<DIV>标记提取数据。表格将自动重复<member>(<name>和<sex>的母标记)的每个实例。
代码列表2:
<!-- example2.htm -->
<html>
<head>
<title>xml DSO-example2.htm</title>
</head>
<body bgcolor="#FFFFFF">
<xml id="xmldb">
<db>
<member>
<name>Premshree Pillai<name>
<sex>male</sex>
</member>
<member>
<name>Vinod</name>
<sex>male</sex>
</member>
</db>
</xml>
<table datasrc="#xmldb" border="1">
<thead>
<th>Name</th>
<th>Sex</th>
</thead>
<tr>
<td><div datafld="name"></div></td>
<td><div datafld="sex"></div></td>
</tr>
</table>
</body>
</html>
使用外部xml文件提取数据
为了使用xml-DSO加载一个外部xml文件,你必须显式的包含这个对象并且使用一些JavaScript。
首先创建一个xml-DSO对象,使用ID myxml。添加宽度和高度属性到<OBJECT>标记中,然后设置它们的值为0。这保证xml-DSO对象不会占据你的web页面的任何空间。
其次,使用datasrc创建一个象myxml一样的表--类似于代码列表2中一样。代码使用<DIV>标记(在TD标记之)提取数据,使用datafld作为第一栏的信息,并且使用URL作为第二栏。添加<SCRIPT>标记,因为在这里,外部的xml使用Java脚本显式地声明你想要加载的xml文件。
设置变量xmlDso为myxml.xmlDocument。myxml引用你已经创建的对象。接下来,使用xml-DSO的load()方法加载example3.xml。文件example3.xml连接到对象myxml上。
<!-- example3.xml -->
<?xml version="1.0" ?>
<ticker>
<item>
<message>JavaScript Ticker using xml DSO</message>
<URL>http://someURL.com</URL>
</item>
</ticker>
现在,研究一下下面的HTML页面:
<!-- example3.htm -->
<html>
<head>
<title>xml DSO-example3.htm</title>
<script language="JavaScript">
function load() {
var xmlDso=myxml.xmlDocument;
xmlDso.load("example3.xml");
}
</script>
</head>
<body bgcolor="#FFFFFF" onLoad="load()">
<object id="myxml" CLASSID="clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39"
width="0" height="0"></object>
<table datasrc="#myxml" border="1">
<thead>
<th>Message</th>
<th>URL</th>
</thead>
<tr>
<td><div datafld="message"></div></td>
<td><div datafld="URL"></div></td>
</tr>
</table>
</body>
</html>
输出应是:
Message URL
JavaScript Ticker using xml DSO http://someURL.com
上面的脚本非常特殊化。下面给出一个更一般的脚本:
<script language="JavaScript">
var xmlDso;
function load(xmlFile, objName) {
eval(''xmlDso=''+objName+''.xmlDocument'');
xmlDso.load(xmlFile);
}
</script>
Now, to load any xml file use:
load("SomexmlFile.xml","anyxmlDsoObject");(csdn)